2014-10-19 178 views
1

我遇到了嵌套類中的虛擬方法。擴展嵌套類方法

##classone.h 

class ClassOne: { 
public: 
    class InnerClass{ 
    public: 
     virtual void method1(); 
     ... 

##classone.cpp 
void ClassOne::InnerClass::method1() 
{ 
... 
} 

我繼承ClassOne和需要延長method1()。在這種情況下,嵌套類需要做什麼?

我試過

##subclassone.h 

class SubClassOne: public ClassOne{ 
public: 
    virtual void method1(); 

##subclassone.cpp 

void SubClassOne::InnerClass::method1() 
{ 
##New implementation 
} 

但給人的multiple definition of ClassOne::InnerClass::method1()

+0

你需要繼承'InnerClass'所有的第一次,覆蓋方法吧。 – 2014-10-19 12:02:48

+0

我想你應該說'class SubClassOne:public ClassOne :: InnerClass'而不是 – Rahul 2014-10-19 12:03:46

回答

3

method1屬於ClassOne::InnerClass,不ClassOne。當您從ClassOne繼承時,基類中的嵌套類也成爲派生類的成員,並且您可以通過ClassOne::SubClassOne::進行排位來達到它。因此,有關method1的雙重定義錯誤。你也需要子類InnerClass。如果您仍然希望從ClassOne派生,它應該是這樣的:

class ClassOne { 
public: 
    class InnerClass { 
    public: 
     virtual void method1(); 
    }; 
}; 

void ClassOne::InnerClass::method1() 
{ 
} 

class SubClassOne : public ClassOne { 
    class DerivedInnerClass : InnerClass { // 
     virtual void method1(); 
    }; 
}; 

void SubClassOne::DerivedInnerClass::method1() 
{ 
} 
+0

我也有這個問題。問題是我在擴展「ClassOne」時忘記了public關鍵字。 'class SubClassOne:public ClassOne {' – Sulby 2017-09-26 08:39:14