C++之继承访问控制权限

子类在继承时可以选择public,protected,private三种方式去继承。这三种方式都将继承父类的所有函数成员(除过构造函数和析构函数)和数据成员,但是继承以后的访问控制权限会发生变换。

首先我们给出一个父类。来看看子类的继承方式是否影响它继承父类的所有函数成员(除过构造函数和析构函数)和数据成员。

由于成员函数存储在代码段,类的大小仅仅指类的数据成员的大小。我们从类的大小上来说明子类会继承父类的所有函数成员(除过构造函数和析构函数)和数据成员。在public,protected,private下面都放一个变量,来让测试说明问题。

#pragma once
#include <iostream>

using namespace std;

class Parent
{
public:
	double x;
protected:
	double b;
private:
	double c;
};

class Child1 : public Parent
{
public:

protected:

private:

};

class Child2 : protected Parent
{
public:

protected:

private:

};

class Child3 : private Parent
{
public:

protected:

private:

};
#include"标头.h"

int main()
{
	cout << "Parent的大小:" << sizeof(Parent) << endl;
	cout << "Child1的大小:" << sizeof(Child1) << endl;
	cout << "Child2的大小:" << sizeof(Child2) << endl;
	cout << "Child3的大小:" << sizeof(Child3) << endl;

	return 0;
}

测试结果:

可以看到无论是什么继承方式,子类都会继承父类的所有函数成员(除过构造函数和析构函数)和数据成员。

那么这三种继承方式有什么不同呢?

public继承:           继承以后父类的public成员在子类仍旧是public成员,父类的protected成员在子类仍旧是protected成员。 父类的private成员在子类中不可访问。

protected继承:    继承以后父类的public成员在子类中变成protected成员,父类的protected成员在子类仍旧是protected成员 。父类的private成员在子类中不可访问。

private继承:        继承以后父类的public成员在子类中变成private成员,父类的protected成员在子类中变成private成员 ,父类的private成员在子类中不可访问。

 

 

 

 

发布了222 篇原创文章 · 获赞 174 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/zy010101/article/details/105254676