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的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.NullPointerException: Attempt to invoke virtual method ‘int android.database.sqlite异常(代码片段
var ball0=new Ball("executing") 是怎样被执行的?
[React] Create a Virtualized List with Auto Sizing Cells using react-virtualized and CellMeasurer(代码
代码大全2 chapter1 Welcome to Software Construction
Zend Framework 2:传递给Album Controller AlbumController :: __ construct()的参数1必须是Album Controller (代码