考虑
class A
{
protected:
virtual void function() =0;
}
class B: public class A
{
protected:
virtual void function() { blah blah blah };
}
我想让B类中的function()也是纯虚函数。也就是说,B的派生类必须进行function()的另一个实现。我该如何执行此任务?
答案 0 :(得分:-1)
任何未实现所有基类的纯虚方法的派生类都是抽象类,因此您无法实例化它。所以你必须实现后者。
同时在声明继承的类时删除关键字class
:
class B: public class A
成为:
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
设为纯,因此无法实例化它。我还为它添加了一个定义,以便派生类的对象可以chain up
来实现功能。你也可以做ADT:
class B : public A{
// it is sufficient to make it ADT by not implementing the base pure method function.
};