赞
踩
总的规则就是:派生类的访问权限规则如下:
1.不管以什么继承方式,派生类内部都不能访问基类的私有成员。
2.不管以什么继承方式,派生类内部除了基类的私有成员不可以访问外,其他的都可以访问。
3.不管以什么继承方式,派生类对象除了公有继承基类中的公有成员可以访问外,其他的一律不能访问
我们先试一下public继承
#include <iostream> using std::cout; using std::endl; class Point { public: Point(int ix=0,int iy=0) :_ix(ix) ,_iy(iy) { cout<<"Point(int = 0,int = 0)"<<endl; } int getY()const { return _iy; } ~Point() { cout<<"~Point()"<<endl; } protected: int _ix; private: int _iy; }; class Point3D :public Point { public: Point3D(int ix = 0,int iy = 0,int iz = 0) :Point(ix,iy) , _iz(iz) { cout<<"Point3D(int=0,int=0,int=0)"<<endl; } void print() { cout<<"_ix="<<_ix<<endl//protected <<"_iy="<<getY()<<endl//public /* <<"_iy="<<_iy<<endl;//error,基类的私有成员不能在类外进行访问 */ <<"_iz="<<_iz<<endl; } ~Point3D() { cout<<"~Point3D()"<<endl; } private: int _iz; }; int main() { Point3D pt3d(1,2,3); pt3d.getY(); return 0; }
可以完美的编译通过
接下来private继承又有点不同
#include <iostream> using std::cout; using std::endl; class Point { public: Point(int ix=0,int iy=0) :_ix(ix) ,_iy(iy) { cout<<"Point(int=0,int=0)"<<endl; } int getY()const { return _iy; } ~Point() { cout<<"~Point()"<<endl; } protected: int _ix; private: int _iy; }; class Point3D :private Point { public: Point3D(int ix=0,int iy=0,int iz=0) :Point(ix,iy) ,_iz(iz) { cout<<"Point3D(int=0,int=0,int=0)"<<endl; } void print() { cout<<"_ix="<<_ix<<endl//private <<"_iy="<<getY()<<endl//private /* <<"_iy="<<_iy<<endl//error,基类的私有成员不能在类外进行访问 */ <<"_iz="<<_iz<<endl; } ~Point3D() { cout<<"~Point3D()"<<endl; } private: int _iz; }; class Point4D :private Point3D { public: void show() { /* cout<<"_ix="<<_ix<<endl */ /* <<"_iy="<<getY()<<endl; */ cout<<"_im="<<_im<<endl; } private: int _im; }; int main() { Point3D pt3d(1,2,3); /* pt3d._ix=100;//error */ /* pt3d.getY();//error */ return 0; }
对一个私有继承再继承一次的话,Point3D所有的所有成员都是private,Point4D的便不能访问Point3D的任何成员。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。