2014-10-19 175 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