看下面的代码:
class A
{
public:
virtual int getN() = 0;
};
class B : public A
{
private:
int n = 2;
public:
int getN() { return n; }
};
class C : public A
{
// do not contain property n, it nolonger need getN();
};
A类是一个抽象类。现在我有从A派生的C类。但是它不像B类具有属性n。所以我不能重载
getN()
,然后类C是一个抽象类,无法实例化它。因此,如果我想实例化C类,该怎么办?
最佳答案
继承表示一种“类似”的关系。
由于C
没有getN()
方法,因此它不能是A
的“种类”,因为持有A
引用的任何人都有权期望getN()
存在。
他们拥有这项权利,因为您通过将getN
放在A
的公共虚拟接口中来断言。
故事的寓意-尽可能避免继承。首选封装。