根据我所读到的,当你有一个抽象基类持有数据时,将使用虚拟基类,因此该类不会被复制,但是,如果不使用虚拟类,复制类时会出现什么问题?为什么我应该使用虚拟基类?
应该避免保存数据的抽象基类吗?
如下的例子:
class Storable {
public:
Storable(const string& s);
virtual void read() = 0;
virtual void write() = 0;
virtual ~Storable();
protected:
string file_name; // store in file named s
Storable(const Storable&) = delete;
Storable& operator=(const Storable&) = delete;
};
class Transmitter : public virtual Storable {
public:
void write() override;
// ...
};
class Receiver : public virtual Storable {
public:
void write() override;
// ...
};
class Radio : public Transmitter, public Receiver {
public:
void write() override;
// ...
};
这个例子是从书上所采取的C + +编程语言 第4版 - Bjarne的Stroustrup的。
当我写了重复类,它不是在这个意义上,我不会重复的代码。 – Alex
问题是您可能希望数据对于两个实例都是相同的,这很难维护 – StoryTeller
查看钻石继承,例如, [这里](http://stackoverflow.com/questions/379053/diamond-inheritance-c)。 –