#include <iostream>
using namespace std;
class Base
{protected:
int int_i;
double dbl_x;
public:
Base()
{ int_i=1;
dbl_x=1.5;
}
virtual void print()
{ cout << "Base::int_i=" << int_i << endl;
cout << "Base::dbl_x=" << dbl_x << endl;
}
};
class Derived : public Base
{protected:
int int_i;
public:
Derived()
{ int_i=2;
dbl_x=2.5;
}
virtual void print()
{ cout << "Base::int_i=" << Base::int_i << endl;
cout << "Derived::int_i=" << int_i << endl;
cout << "Base::dbl_x=" << Base::dbl_x << endl;
cout << "Derived::dbl_x=" << dbl_x << endl;
}
};
class Derived2: public Derived
{protected:
double dbl_x;
public:
Derived2()
{ int_i=3;
dbl_x=3.5;
}
virtual void print()
{ cout << "Base::int_i=" << Base::int_i << endl;
cout << "Derived::int_i=" << Derived::int_i << endl;
cout << "Derived2::int_i=" << int_i << endl;
cout << "Base::dbl_x=" << Base::dbl_x << endl;
cout << "Derived::dbl_x=" << Derived::dbl_x << endl;
cout << "Derived2::dbl_x=" << dbl_x << endl;
}
};
int main()
{ Derived2 d2;
Derived d;
Base b, *p;
p=&d2;
p->print();
p=&d;
p->print();
p=&b;
p->print();
system("PAUSE"); return 0;
}
很显然的看到,派生类中的重名成员只不过隐藏(hide)了基类的同名成员,默认情况下是访问派生类中的成员,要访问基类中同名成员必须加上类域符
既然是隐藏,那么在基类子对象中仍然是存在的!要记住,无论怎样继承,C++都需要保证基类子对象的完整性!
这和成员函数同名一样,只不过成员函数同名时要分清hide和override!