class A
{
protected:
virtual void function() =0;
}
class B: public class A
{
protected:
virtual void function() { blah blah blah };
}
我想使()函數中的B級也是一個純虛函數。也就是說,B的派生類必須再次實現function()。我該如何執行此任務?
class A
{
protected:
virtual void function() =0;
}
class B: public class A
{
protected:
virtual void function() { blah blah blah };
}
我想使()函數中的B級也是一個純虛函數。也就是說,B的派生類必須再次實現function()。我該如何執行此任務?
沒有實現所有基類的純虛方法的任何派生類都是抽象類,所以您不能實例化它。所以你必須實施後者。
聲明繼承的類時,也刪除關鍵字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.
};
您無法立即定義純虛函數... – Rakete1111
@ Rakete1111:您的證明是什麼? - 「鏈接」呢? – Raindrop7
該語言不允許它([ref](http://eel.is/c++draft/class#mem-11.sentence-3))。這與「鏈接」無關,「virtual void f()= 0 {}'是無效的C++。 – Rakete1111
是什麼阻止你?你有什麼嘗試? –