すべての基本クラスの純粋仮想メソッドを実装していない任意の派生クラスは抽象クラスであり、インスタンス化できません。したがって、後者を実装する必要があります。
を:
class B: public A {
};
またセミコロンが冗長でないのでの各端部に追加クラス宣言。
class A{
public:
virtual void function() =0;
};
class B: public A {
public:
virtual void function()= 0; // B is an ADT due to this pure method function.
};
void B::function() {
std::cout << "B::function()" << std::endl;
};
class C : public B{
public:
void function(){
B::function();
std::cout << "C::funtion()" << std::endl;
}
};
int main(){
// A aObj; // error
// B bObj; // error
C cObj; // correct
cObj.function();
return 0;
}
- 私は方法
function
純粋な、それはそれをインスタンス化することはできませんので、必ず、クラスBで見ることができるように。私はまた、派生クラスのオブジェクトが機能するためにchain up
できるように定義を追加します。
また、ADTも行うことができます:あなたを停止している何
class B : public A{
// it is sufficient to make it ADT by not implementing the base pure method function.
};
?何を試しましたか? –