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;
注意:在继承NLComponent
的Clone
函数时,虽然返回值发生了变化,但仍属于同一个虚函数
以上是关于virtual constructs的主要内容,如果未能解决你的问题,请参考以下文章
错误:缺少类型说明符 - 假定为 int。 C++ 不支持默认 int
Codeigniter 2 index和__construct之间的区别以及__construct中的内容