网站开发培训怎么样,实体店会员卡管理系统,建水网站开发,做付费网站好转自#xff1a;http://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html C继承#xff1a;公有#xff0c;私有#xff0c;保护 公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。 1. 公有继承(public) 公有继承的特点是基类的公有成… 转自http://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html C继承公有私有保护 公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时它们都保持原有的状态而基类的私有成员仍然是私有的不能被这个派生类的子类所访问。 2. 私有继承(private) 私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员并且不能被这个派生类的子类所访问。 3. 保护继承(protected) 保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员并且只能被它的派生类成员函数或友元访问基类的私有成员仍然是私有的。 下面列出三种不同的继承方式的基类特性和派生类特性。 public protected private 共有继承 public protected 不可见 私有继承 private private 不可见 保护继承 protected protected 不可见 在上图中1基类成员对派生类都是共有和保护的成员是可见的私有的的成员是不可见的。 2基类成员对派生类的对象来说要看基类的成员在派生类中变成了什么类型的成员。如私有继承时基类的共有成员和私有成员都变成了派生类中的私有成员因此对于派生类中的对象来说基类的共有成员和私有成员就是不可见的。 为了进一步理解三种不同的继承方式在其成员的可见性方面的区别下面从三种不同角度进行讨论。 对于公有继承方式 (1) 基类成员对其对象的可见性 公有成员可见其他不可见。这里保护成员同于私有成员。 (2) 基类成员对派生类的可见性 公有成员和保护成员可见而私有成员不可见。这里保护成员同于公有成员。 (3) 基类成员对派生类对象的可见性 公有成员可见其他成员不可见。 所以在公有继承时派生类的对象可以访问基类中的公有成员派生类的成员函数可以访问基类中的公有成员和保护成员。这里一定要区分清楚派生类的对象和派生类中的成员函数对基类的访问是不同的。 对于私有继承方式 (1) 基类成员对其对象的可见性 公有成员可见其他成员不可见。 (2) 基类成员对派生类的可见性 公有成员和保护成员是可见的而私有成员是不可见的。 (3) 基类成员对派生类对象的可见性 所有成员都是不可见的。 所以在私有继承时基类的成员只能由直接派生类访问而无法再往下继承。 对于保护继承方式 这种继承方式与私有继承方式的情况相同。两者的区别仅在于对派生类的成员而言对基类成员有不同的可见性。 上述所说的可见性也就是可访问性。 关于可访问性还有另的一种说法。这种规则中称派生类的对象对基类访问为水平访问称派生类的派生类对基类的访问为垂直访问。 看看这样的例子 #includeiostream using namespace std; // class A //父类 { private: int privatedateA; protected: int protecteddateA; public: int publicdateA; }; // class B :public A //基类A的派生类B共有继承 { public: void funct() { int b; bprivatedateA; //error基类中私有成员在派生类中是不可见的 bprotecteddateA;//ok基类的保护成员在派生类中为保护成员 bpublicdateA; //ok基类的公共成员在派生类中为公共成员 } }; // class C :private A //基类A的派生类C私有继承 { public: void funct() { int c; cprivatedateA; //error基类中私有成员在派生类中是不可见的 cprotecteddateA; //ok基类的保护成员在派生类中为私有成员 cpublicdateA; //ok基类的公共成员在派生类中为私有成员 } }; // class D :protected A //基类A的派生类D保护继承 { public: void funct() { int d; dprivatedateA; //error基类中私有成员在派生类中是不可见的 dprotecteddateA;//ok基类的保护成员在派生类中为保护成员 dpublicdateA; //ok基类的公共成员在派生类中为保护成员 } }; // int main() { int a; B objB; aobjB.privatedateA; //error基类中私有成员在派生类中是不可见的,对对象不可见 aobjB.protecteddateA;//error基类的保护成员在派生类中为保护成员对对象不可见 aobjB.publicdateA; //ok基类的公共成员在派生类中为公共成员对对象可见 C objC; aobjC.privatedateA; //error基类中私有成员在派生类中是不可见的,对对象不可见 aobjC.protecteddateA;//error基类的保护成员在派生类中为私有成员对对象不可见 aobjC.publicdateA; //error基类的公共成员在派生类中为私有成员对对象不可见 D objD; aobjD.privatedateA; //error基类中私有成员在派生类中是不可见的,对对象不可见 aobjD.protecteddateA;//error基类的保护成员在派生类中为保护成员对对象不可见 aobjD.publicdateA; //error基类的公共成员在派生类中为保护成员对对象不可见 return 0; }