C++ 继承之 派生类的访问控制

继承说明

    1、子类拥有父类的所有成员变量和成员函数

    2、子类就是一种特殊的父类

    3、子类对象可以当作父类对象使用

    4、子类可以拥有父类没有的方法和属性

派生类的访问控制

    派生类继承了基类的全部成员变量和成员方法(除了构造和析构之外的成员方法),但是这些成员的访问属性,在派生过程中是可以调整的​

不同继承方式会改变继承成员的访问属性

1)C++中继承方式会影响子类的对外访问的属性

    public继承:父类成员在子类中保持原有的访问级别

    private继承:父类成员在子类中变为private成员

    protected:父类中public成员变为protected

                        父类中protected成员依然为protected

                        父类中private成员依然为private

2)private成员在子类中依然存在,但是却无法访问。不论何种方式继承基类,派生类都不能直接使用父类中的私有成员

#include<iostream>
using namespace std;

class test
{
public:
	int a;
protected:
	int b;
private:
	int c;

};
/*C++中的继承方式(public,private,protected)会影响子类的对外访问属性
	判断某一句话,能否被访问
	1)看调用语句,这句话写在子类的内部,外部
	2)看子类如何从父类继承(public,private,protected)
	3)看父类中的访级别(public,private,protected)*/
class child :public test
{
public:
	void changedata()
	{
		a = 10;//ok
		b = 10;//ok
		//c = 10;//error
	}
};
//protected关键字修饰的成员变量和成员函数,是为了在家族中使用 为了继承
class child1 :protected test
{
public:
	void changedata()
	{
		a = 10;//ok
		b = 10;//ok
		//c = 10;//error
	}
};
class child2 :private test
{
public:
	void changedata()
	{
		a = 10;//ok
		b = 10;//ok
		//c = 10;//error
	}
};
void main()
{
	//派生类的继承方式为public
	child c1;
	c1.a = 10;//ok
	//c1.b = 10;//error
	//c1.c = 10;//error

	//派生类的继承方式为protected
	child1 c2;
	//c2.a = 10;//error
	//c2.b = 10;//error
	//c2.c = 10;//error

	//派生类的继承方式为private
	child2 c3;
	//c3.a = 10;//error
	//c3.b = 10;//error
	//c3.c = 10;//error

	system("pause");
}

猜你喜欢

转载自blog.csdn.net/error0_dameng/article/details/82187531