virtual constructs

Posted zeqi1991

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了virtual constructs相关的知识,希望对你有一定的参考价值。

假定一个新闻由文字和图片组成

//抽象基类
class NLComponent




class TextBlock : public NLComponent


class Graphic : public NLComponent


//新闻管理器

class NewsLetter

public:

private:
    std::vector<NLComponent*> components;

问题 : NewsLetter要有拷贝构造函数时应该怎么处理?

对components这个成员变量复制一份(深拷贝),由于vector内部都是基类指针,我们需要知道它具体的类型是文字还是图片才能决定拷贝的是什么、这里就出现了问题。怎么解决?

//抽象基类
class NLComponent

public:
    virtual NLComponent* Clone() const = 0;


class TextBlock : public NLComponent

public:
    virtual TextBlock* Clone() const
    
        return new TextBlock(*this);
    


class Graphic : public NLComponent

public:
    virtual Graphic* Clone() const
    
        return new Graphic(*this);
    


//新闻管理器

class NewsLetter

public:
    NewsLetter(const NewsLetter& other)
    
        for (size_t i = 0; i < other.components.size(); i++)
        
            components.push_back(other.components[i].Clone());
        
    
private:
    std::vector<NLComponent*> components;

注意:在继承NLComponentClone函数时,虽然返回值发生了变化,但仍属于同一个虚函数

以上是关于virtual constructs的主要内容,如果未能解决你的问题,请参考以下文章

静态成员变量不占用类的内存空间

错误:缺少类型说明符 - 假定为 int。 C++ 不支持默认 int

Thinking in Java -- 类型信息RTTI

Codeigniter 2 index和__construct之间的区别以及__construct中的内容

将实时音频/视频聊天集成到Construct 2 游戏中或将Construct 2 嵌入到应用程序中

CONSTRUCT 子句的实际使用(和重用)