根據我所讀到的,當你有一個抽象基類持有數據時,將使用虛擬基類,因此該類不會被複制,但是,如果不使用虛擬類,複製類時會出現什麼問題?爲什麼我應該使用虛擬基類?
應該避免保存數據的抽象基類嗎?
如下的例子:
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)。 –