c++继承访问控制

来源:互联网 发布:c语言中 p 编辑:程序博客网 时间:2024/06/05 04:02

访问控制方式这里有篇很好的文章,其实内容也是总结c++primer上的内容
现在就按照这篇的文章举例进行学习.

思路

不同继承方式的影响主要体现在:

1、派生类成员对基类成员的访问控制。

2、派生类对象对基类成员的访问控制

三种继承方式

公有继承(public)

所有public和protected成员在派生类中的访问方式不变,但是私有成员(private)不能访问

1) 通过派生类的成员函数能够访问基类的public和protected成员,但是不能访问基类的成员.

2) 通过派生类的对象能够只能访问基类中的public成员.

举例说明

class A { public :   int a = 0; protected:   int b = 0; private:   int c = 0;}class B:public A{  public:  void test1(){   cout  }}class A { public :   int a = 0; protected:   int b = 0; private:   int c = 0;};class B:public A{  public:  void test1(){   cout<<"visit public a "<< a<<endl;  }  void test2(){   cout << "visit protected "<< b <<endl;  }  void test3(){ //  cout << "visit private "<< c <<endl;  违反第1)条  报错  }};int main(){  B b;  b.test1();  b.test2();  //b.test3();  cout << b.a<<endl;//  cout << b.b<<endl;  违反第2)条  报错//  cout << b.c<<endl;  违反第3)条  报错  return 0;}

私有继承(private)

基类中的成员都以private的身份出现在派生类当中,派生类中的成员不能访问父类的private成员
1)派生类中的成员函数可以直接访问基类中的public和protected成员,但不能访问基类的private成员
2)通过派生类的对象不能访问基类中的任何成员。

如果将上边的代码改成B私有继承A.新增一条报错语句 cout << b.a <

保护继承(protected)

基类的public和protected成员都以protected身份出现在派生类中,但基类的private成员不可访问。
1)派生类中的成员函数可以直接访问基类中的public和protected成员,但不能访问基类的private成员。
2)通过派生类的对象不能访问基类中的任何成员。
它的报错情况同private.其实在垂直访问上procted与public相同,对类对象的用户来说,它又和private相同.即实现了代码重用的同时还限定了用户的访问权限.为了说明问题我们再加一个类:

class C: protected B{ public:  void test2(){    cout << "visited b in C"<< b<<endl;  } };

如果有:
C c;
c.b肯定报错,但是C中test2()函数不会报错,可以访问b,因为b的protect属性被传递过来了.但是如果B私有继承A的话,b就不会传递过来.代码重用性就不好了.

当然还有一些其他有待研究的遗留问题,比如友元在访问控制中有什么作用呢,会不会被继承.六大函数在继承中又扮演着什么角色.留待以后继续研究.如要深究,请仔细阅读c++ primer P549的内容继续学习.

原创粉丝点击