我創建了在C++中使用其他接口的接口(抽象類),並試圖實現它們,但編譯時發生錯誤。C++實現擴展子接口而不覆蓋已覆蓋的方法的子類
下面是錯誤:
main.cpp: In function 'int main()':
main.cpp:36:38: error: cannot allocate an object of abstract type 'Subclass'
Subclass * subObj = new Subclass();
^
Subclass.h:13:7: note: because the following virtual functions are pure within 'Subclass':
class Subclass : SubInterface {
^
SuperInterface.h:13:18: note: virtual void SuperInterface::doSomething()
virtual void doSomething()=0;
這裏是我的消息來源:
#include <iostream>
class SuperInterface {
public:
virtual void doSomething() = 0;
protected:
int someValue;
};
class SubInterface : public SuperInterface {
public:
virtual void doSomethingElseThatHasNothingToDoWithTheOtherMethod() = 0;
protected:
int anotherValue;
};
class Superclass : public SuperInterface {
public:
Superclass() {}
virtual ~Superclass() {}
void doSomething() {std::cout << "hello stackoverflow!";}
};
class Subclass : public SubInterface {
public:
Subclass() {}
virtual ~Subclass() {}
void doSomethingElseThatHasNothingToDoWithTheOtherMethod() {std::cout << "goodbye stackoverflow!";}
};
int main(void)
{
Superclass * superObj = new Superclass();
Subclass * subObj = new Subclass();
}
這是我想要的東西: 我想我的實現要知道等有與已經被覆蓋的方法相同的行爲(例如,subObj->doSomething()
方法不需要再次實施)。任何人都可以告訴我,如果甚至有可能發生,我該怎麼做?謝謝。
只是用我的眼睛解析你的代碼。像Subclass這樣的Seens聲明doSomethingElse是純虛擬的。這是一個錯字,對嗎? –
公開派生,在Subclass :: doSomethingElse聲明中除去= 0並在Subclass中實現doSomething。那麼你不必公開派生,但它可能是你想要的。默認情況下類私下繼承。我使用純粹的接口結構。 – codah
這是一個錯字,我的錯誤,我改名爲另一種方法,以明確兩種方法有不同的行爲。 –