C++的私有继承、公有继承和保护继承
2012-06-28 17:03
218 查看
#include <iostream> using namespace std; class Animal { protected: int test; void sleep(){cout << "animal sleep...\n";} 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(); sleep(); cout << "test: "<<test << endl; cout << "strech neck \n"<<endl; } }; class dog: protected Animal { public: dog(){cout << "dog init...\n";} void run(double) { cout << "dog run start .... \n"; eat(); sleep(); cout << "test: "<<test << endl; cout << "dog run end .... \n"; } }; class Cat: public Animal { public: Cat(){cout << "cat init...\n";} // void eat(){cout << "cat eat ...\n";} void Meaw(){ eat(); sleep(); cout << "meaw\n";} }; void Func(Animal& an) { an.eat(); } int main() { Cat dao; Giraffe gir; dog dg; Func(dao); //Func(dg);//error dao.Meaw(); dg.run(11); //dao.sleep(); //error cout << "==========================\n"; gir.StrechNeck(12); // Func(gir); //error return 0; }
运行结果:
总结:
1. 不管是私有继承还是公有继承都无法访问父类的私有成员;
2. 公有继承的子类对象,可以直接访问父类的public的成员,就如同访问自己的成员一样;
3. 私有继承的子类对象,不能直接访问父类的任何成员;
4. 私有继承的子类对象,如果想要访问父类成员,只能通过子类的成员函数来访问父类的成员,就如同父类成员函数访问自己的成员(当然,父类的private成员无法访问)。
5. 保护继承与私有继承类似,继承之后的类相对于父类是独立的;其类对象,在公开场合无法使用基类的成员,也只能通过自己的成员函数来访问父类的protected和public成员。
下面分类说明:
(一)公有继承
1. 基类成员对派生类的可见性 对于 派生类来说,基类的公有成员和保护成员可见,私有成员不可见;
2. 基类成员对于派生类对象的可见性 对于 派生类对象来说,派生类对象 可以访问基类的公有成员,派生类的成员函数可以访问基类的公有成员和保护成员。
(二)私有继承
1. 基类成员对于派生类的可见性 对 派生类 来说,基类的公有成员和保护成员是可见的,基类的公有成员和保护成员都作为派生类的私有成员,并且不能够被这个派生类的子类所访问;基类的私有成员是不可访问的;
2. 基类成员对于派生类对象的可见性来说,基类的所有成员都不可见。
(三)保护继承
1. 基类成员对于派生类的可见性 对 派生类 来说,基类的公有成员和保护成员是可见的,基类的公有成员和保护成员都作为派生类的私有成员,并且不能够被这个派生类的子类所访问;基类的私有成员是不可访问的;
2. 基类成员对于派生类对象的可见性来说,基类的所有成员都不可见。
所以,私有继承和保护继承的派生类,其子类均无法访问基类成员,导致基类无法再往下继承。
相关文章推荐
- C++继承:公有,私有,保护
- C++继承:公有,私有,保护
- C++继承:公有,私有,保护
- c++ 公有继承、保护继承和私有继承的区别
- C++继承:公有、私有、保护
- C++继承:公有 私有 保护
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- c++高级---C++继承:公有,私有,保护
- C++继承:公有,私有,保护(转)
- C++继承:公有,私有,保护
- C++继承:公有,私有,保护
- C++ 公有 私有 保护继承
- C++继承:公有,私有,保护
- C++学习笔记14,private/protected/public继承,私有继承,保护继承,公有继承(五)(总结)
- 从零开始学C++之继承(一):公有/私有/保护继承、overload/overwrite/override之间的区别
- C++继承:公有,私有,保护
- C++继承:公有,私有,保护
- C++的私有继承、公有继承和保护继承
- C++继承:公有,私有,保护
- C++继承:公有,私有,保护