[cpp] #include <iostream> using namespace std; class Animal { protected: int test; public: Animal(){ test = 0; cout << "animal init...\n";} void eat(){cout << "Animal eat..." << endl;} }; class Giraffe: private Animal { public: Giraffe(){cout << "giraffe init...\n";} void StrechNeck(double) { eat(); cout << "test: "<<test << endl; cout << "strech neck \n"<<endl; } }; class Cat: public Animal { public: Cat(){cout << "cat init...\n";} // void eat(){cout << "cat eat ...\n";} void Meaw(){ eat(); cout << "meaw\n";} }; void Func(Animal& an) { an.eat(); } int main() { Cat dao; Giraffe gir; Func(dao); dao.Meaw(); cout << "==========================\n"; gir.StrechNeck(12); // Func(gir); return 0; }
运行结果:
总结: 1. 不管是私有继承还是公有继承都无法访问父类的私有成员; 2. 公有继承的子类对象,可以直接访问父类的protected和public的成员,就如同访问自己的成员一样; 3. 私有继承的子类对象,不能直接访问父类的任何成员; 4. 私有继承的子类对象,如果想要访问父类成员,只能通过子类的成员函数来访问父类的成员,就如同父类成员函数访问自己的成员(当然,父类的private成员无法访问)。 5. 保护继承与私有继承类似,继承之后的类相对于父类是独立的;其类对象,在公开场合无法使用基类的成员,也只能通过自己的成员函数来访问父类的protected和public成员。
|