读书人

基类的私成事员和派生类私有成员同名

发布时间: 2013-01-22 10:23:54 作者: rapoo

基类的私有成员和派生类私有成员同名,派生类调用基类public函数中使用的是基类还是派生类的变量?
RT
在OOP的卷子中做到一道题


class Base {
public:
Base():i(1) { f(); }
virtual void f() { i *= 20; }
virtual void print() { cout <<i << endl; }
private:
int i;
};

class Derived : public Base {
public:
Derived():i(2) { }
void f() { i*=30; }
private:
int i;
};
void main()
{
Base *p = new Derived;
p->print();
}


求问程序输出什么值? c++ class inheritance
[解决办法]
调用Base()构造 i=20 ;调用子类构造..
输出20...
[解决办法]
derive class构造的时候是先构造base class,
而构造base class的时候其实对象还是个base class object,也就是vfptr这时指向的是base vfptr,
所以会调用到base f()
base class构造完成后,构造继续执行,这时才改写vfptr指向derive class 的vfptr
[解决办法]
虚机制在构造函数不起作用的

读书人网 >C++

热点推荐