我对继承概念很陌生,因此我有一个问题。想象一下,我有一个这样的课程:
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在派生类中的工作方式不同。我怎么能这样做?
答案 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;
}
};
请记住,通过这样的操作,您需要实现所有构造函数并复制运算符和析构函数。