2016-11-28 99 views
-6

有什么问题?我认为,这是正确面向对象问题C++

class A{ 
public: 
    virtual bool isGun() = 0; 
    virtual bool isArmor() = 0; 
}; 

class B: public A{ 
public: 
    virtual bool isGun(){ return true; } 
}; 

int main(){ 
    B* b = new B; 
} 

A :: isArmor() - 定义为其他类

我真的需要定义所有子类的所有纯虚函数?

+1

你的类定义中没有'print'。 –

+2

是什么让你相信'A :: isGun()'在你的例子中被调用,而不是'B :: isGun()'?如果没有定义它,那么如何调用'A :: isGun()'even *? –

+1

为什么你认为'A :: isGun()'被调用?这将是一个绝招,能够调用一个纯粹的,不存在的函数。 –

回答

0

你必须重写你的子类中的纯虚函数,否则你的子类将变成抽象类,因此我们不能创建抽象类的对象。

如果您不希望子类中的isArmor函数公开,请将其覆盖为private,以便B的客户端无法使用它。

class B : public A{ 
private: 
    virtual bool isArmor() { return true; } // Like this 
public: 
    virtual bool isGun(){ return true; } 
}; 
1

有什么不好?

您还没有定义在BisArmor因此你不能创建B任何实例。

我真的需要在所有子类中定义所有纯虚函数吗?

是的。这就是纯虚函数意味着。如果你不想在所有的子类中定义一个函数,那么不要把它变成纯虚拟的。