Ale*_*lex 4 c++ oop inheritance abstract-class c++11
根据我的阅读,当你有一个包含数据的抽象基类时,会使用虚基类,所以不会复制类,但是,如果不使用虚拟类,复制类有什么问题?
应该避免使用保存数据的抽象基类吗?
举个例子:
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;
// ...
};
Run Code Online (Sandbox Code Playgroud)
这个例子来自于The C++ Programming Language 4th Edition - Bjarne Stroustrup.
为了简短起见,如果你不使用虚拟继承,Storable那么Radio它将继承它两次,一次从Transmitter一次继承Receiver.
这意味着Radio需要2个实例的内存,Storable这是一些内存开销,并且你很可能希望两者都有相同的数据(如果你没有继承它,你必须手动管理它).
此外,当您从Storable(或访问数据成员)调用基类函数时,您要调用哪一个?从Storable那个继承Transmitter的Storable那个或从那个继承的那个继承通过Receiver
虚拟继承只需要具有Storable所有继承类共享的基类的单个实例来处理这种情况.
有关虚拟基类的mor信息,这里有一个很好的问题:在C++中,什么是虚拟基类?
| 归档时间: |
|
| 查看次数: |
995 次 |
| 最近记录: |