2013-12-11 56 views
0

我對繼承的概念很陌生,因此我有一個問題。想象一下,我有一個類是這樣的:繼承涉及內部類C++

class A{ 
    protected: 
    class B{ 
     int x; 
     B() : x(3){} 
     int g(int y) {return x*y;} 
     friend class A; 
    }; 
    B *b; 
    public: 
    int f(int y) {return b->g(y);} 
}; 

我要繼承類A,不能覆蓋方法F,但覆蓋其被用f稱爲法克,這樣使得f將在派生類中的工作方式不同。我怎麼能這樣做?

+0

只能在內部'類B'的派生中_'覆蓋'_(虛擬)方法,而不能直接在'A類'的派生類中。 –

回答

1

您還需要指定構造(S)和強制爲A級。這種情況下,複製操作讓我們假設你的構造函數的一個看起來是這樣的:

A::A() 
{ 
    b = new B; 
} 

然後,你需要做的是用一個指針代替b向來自的b源自A類的構造函數(S)的派生類:

class C : public A 
{ 
protected: 
    class D : public B 
    { 
     int z; 
    public: 
     D() : z(27) { } 
     int g(int y) { return z + y;} 
    }; 

public: 
    C() 
    { 
     // Delete pointer to B created by the parent class constructor that 
     // executes just before this constructor. 
     delete b; 
     // Point b to an instance of D; possible because D is derived from B. 
     b = new D; 
    } 
}; 

,記住這個操作一樣,你需要實現所有構造函數和複製操作員和析構函數。