涉及内部类C ++的继承

时间:2013-12-11 23:50:52

标签: c++ inheritance

我对继承概念很陌生,因此我有一个问题。想象一下,我有一个这样的课程:

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调用的方法g,这样f在派生类中的工作方式不同。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

你还需要指定构造函数和强制在本例中为类A的复制操作符。让我们假设你的一个构造函数如下所示:

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

然后你需要做的是用从A派生的类的构造函数中指向从B派生的类的指针替换b:

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;
    }
}; 

请记住,通过这样的操作,您需要实现所有构造函数并复制运算符和析构函数。