C++中继承方式

三种继承方式:

继承方式基类的public成员基类的protected成员基类的private成员继承引起的访问控制关系变化概括
public继承 仍为public成员 仍为protected成员 不可见 基类的非私有成员在子类的访问属性不变
protected继承 变为protected成员 变为protected成员 不可见 基类的非私有成员都为子类的保护成员
private继承 变为private成员 变为private成员 不可见 基类中的非私有成员都称为子类的私有成员

继承中的特点

有public, protected, private三种继承方式,它们相应地改变了基类成员的访问属性。

  • 1.public 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:public, protected, private

  • 2.protected 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:protected, protected, private

  • 3.private 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:private, private, private

但无论哪种继承方式,上面两点都没有改变:

  • 1.private 成员只能被本类成员(类内)和友元访问,不能被派生类访问;

  • 2.protected 成员可以被派生类访问。

#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;

}

posted on 2019-09-09 10:22  虽千万人吾往矣-GKH  阅读(135)  评论(0编辑  收藏  举报

导航