C++之共有继承、保护继承、私有继承

1.封装,public,private做用就是这个目的。ios

  类外只能访问public成员而不能方位private成员;spa

  private成员只能被类成员和友元访问;code

2.继承,protected的做用就是这个目的;对象

  protected成员能够被子类对象访问,但不能被类外的访问;blog

3.公有继承:class A : public B继承

#include<iostream> #include<assert.h>
using namespace std; class A{ public: int a; A(){ a1 = 1; a2 = 2; a3 = 3; a = 4; } void fun(){ cout << a << endl;    //正确
    cout << a1 << endl;   //正确
    cout << a2 << endl;   //正确
    cout << a3 << endl;   //正确
 } public: int a1; protected: int a2; private: int a3; }; class B : public A{ public: int a; B(int i){ A(); a = i; } void fun(){ cout << a << endl;        //正确,public成员
    cout << a1 << endl;       //正确,基类的public成员,在派生类中还是public成员。
    cout << a2 << endl;       //正确,基类的protected成员,在派生类中还是protected能够被派生类访问。
    cout << a3 << endl;       //错误,基类的private成员不能被派生类访问。
 } }; int main(){ B b(10); cout << b.a << endl;   //正确 cout << b.a1 << endl;   //正确
  cout << b.a2 << endl;   //错误,类外不能访问protected成员
  cout << b.a3 << endl;   //错误,类外不能访问private成员
  system("pause"); return 0; }

 

4.保护继承io

#include<iostream> #include<assert.h>
using namespace std; class A{ public: int a; A(){ a1 = 1; a2 = 2; a3 = 3; a = 4; } void fun(){ cout << a << endl;    //正确
    cout << a1 << endl;   //正确
    cout << a2 << endl;   //正确
    cout << a3 << endl;   //正确
 } public: int a1; protected: int a2; private: int a3; }; class B : protected A{ public: int a; B(int i){ A(); a = i; } void fun(){ cout << a << endl;       //正确,public成员。
    cout << a1 << endl;       //正确,基类的public成员,在派生类中变成了protected,能够被派生类访问。
    cout << a2 << endl;       //正确,基类的protected成员,在派生类中仍是protected,能够被派生类访问。
    cout << a3 << endl;       //错误,基类的private成员不能被派生类访问。
 } }; int main(){ B b(10); cout << b.a << endl;       //正确。public成员
  cout << b.a1 << endl;      //错误,protected成员不能在类外访问。
  cout << b.a2 << endl;      //错误,protected成员不能在类外访问。
  cout << b.a3 << endl;      //错误,private成员不能在类外访问。
  system("pause"); return 0; }

 

5.私有继承class

 

#include<iostream> #include<assert.h>
using namespace std; class A{ public: int a; A(){ a1 = 1; a2 = 2; a3 = 3; a = 4; } void fun(){ cout << a << endl;    //正确
    cout << a1 << endl;   //正确
    cout << a2 << endl;   //正确
    cout << a3 << endl;   //正确
 } public: int a1; protected: int a2; private: int a3; }; class B : private A{ public: int a; B(int i)
{ A(); a
= i; } void fun(){ cout << a << endl; //正确,public成员。 cout << a1 << endl; //正确,基类public成员,在派生类中变成了private,能够被派生类访问。 cout << a2 << endl; //正确,基类的protected成员,在派生类中变成了private,能够被派生类访问。 cout << a3 << endl; //错误,基类的private成员不能被派生类访问。 } }; int main(){ B b(10); cout << b.a << endl; //正确。public成员 cout << b.a1 << endl; //错误,private成员不能在类外访问。 cout << b.a2 << endl; //错误, private成员不能在类外访问。 cout << b.a3 << endl; //错误,private成员不能在类外访问。 system("pause"); return 0; }

 

总结:stream

  protected,是指子类能够访问类成员,可是不能被外部访问;im

相关文章
相关标签/搜索