看下面的代码:

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的公共虚拟接口中来断言。

故事的寓意-尽可能避免继承。首选封装。

09-07 03:37