C++中继承(Inheritance)语法中访问权限(public,protected,private)相关问题的思考

为了增强代码的可读性,我把很多类、变量、函数等用中文命名,在VS2022的最新版本上可以通过编译与运行。

请注意:这样的中文命名纯粹只是为了便于理解,建议大家在写其他代码的时候不要这样写!请规范使用匈牙利命名法(驼峰命名法)!

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

class 基类
{
public:
	int 基类公共变量;
	void 基类公共函数() { cout << "调用基类公共函数\n"; };
protected:
	int 基类保护变量;
	void 基类保护函数() { cout << "调用基类保护函数\n"; };
private:
	int 基类私有变量;
	void 基类私有函数() { cout << "调用基类私有函数\n"; };
};

class 公共继承的派生类:public 基类
{
public:
	void 公共继承的派生类公共函数()
	{ 
		cout << "调用公共继承的派生类公共函数\n";
		基类保护变量 = 1;
		基类保护函数();
	};
protected:
	int 公共继承的派生类保护变量;
private:
	int 公共继承的派生类私有变量;
};

class 保护继承的派生类 :protected 基类
	/*保护继承之后,公共类中原有的public成员在这个保护继承的派生类中变成protected成员*/
{
public:
	void 保护继承的派生类公共函数()
	{
		cout << "调用保护继承的派生类公共函数\n";
		基类保护变量 = 1;
		基类保护函数();
	};
protected:
	int 保护继承的派生类保护变量;
private:
	int 保护继承的派生类私有变量;
};

class 私有继承的派生类 :private 基类
	/*保护继承之后,公共类中原有的public,protected成员在这个私有继承的派生类中变成private成员*/
{
public:
	void 私有继承的派生类公共函数()
	{
		cout << "调用私有继承的派生类公共函数\n";
		基类保护变量 = 1;
		基类保护函数();
	};
protected:
	int 私有继承的派生类保护变量;
private:
	int 私有继承的派生类私有变量;
};

class 保护继承的派生类的公共继承的再派生类 :public 保护继承的派生类
{
public:
	void 保护继承的派生类的公共继承的再派生类公共函数() 
	{ 
		cout << "调用保护继承的派生类的再派生类公共函数\n"; 
		基类保护变量 = 1;
	};
protected:
	int 保护继承的派生类的公共继承的再派生类保护变量;
private:
	int 保护继承的派生类的公共继承的再派生类私有变量;
};

class 私有继承的派生类的公共继承的再派生类 :public 私有继承的派生类
{
public:
	void 私有继承的派生类的公共继承的再派生类公共函数()
	{
		cout << "调用私有继承的派生类的再派生类公共函数\n";
		//这个时候一切基类的对都已经变成私有,都不允许访问了
	};
protected:
	int 私有继承的派生类的公共继承的再派生类保护变量;
private:
	int 私有继承的派生类的公共继承的再派生类私有变量;
};

int main()
{
	基类 基类对象;
	公共继承的派生类 公共继承的派生类对象;
	保护继承的派生类 保护继承的派生类对象;
	私有继承的派生类 私有继承的派生类对象;
	保护继承的派生类的公共继承的再派生类 保护继承的派生类的公共继承的再派生类对象;
	私有继承的派生类的公共继承的再派生类 私有继承的派生类的公共继承的再派生类对象;
	/*区分 用类的对象去调用 和 用类的对象的成员函数去调用*/

	基类对象.基类公共函数();
	/*基类对象 只能调用自己的public成员
	基类对象的成员函数 可以调用自己的所有成员*/

	公共继承的派生类对象.基类公共变量 = 1;
	公共继承的派生类对象.基类公共函数();
	公共继承的派生类对象.公共继承的派生类公共函数();
	/*派生类对象 只能调用自己,以及所继承的基类的public成员
	基类对象的成员函数 可以调用自己的所有成员,以及基类的所有公共、保护成员(见上面)*/

	保护继承的派生类对象.保护继承的派生类公共函数();
	/*派生类对象 只能调用自己,以及所继承的基类的public成员
	但是这里是保护继承的派生类对象,基类中的public成员对于这个保护继承的派生类的对象而言也变成了protected,所以保护继承的派生类对象无法访问基类中的所有成员了
	派生类对象的成员函数 可以调用自己的所有成员,以及基类的所有公共、保护成员
	注意此时的基类中的public成员对于这个保护继承的派生类的对象而言也变成了protected*/

	私有继承的派生类对象.私有继承的派生类公共函数();
	/*派生类对象 只能调用自己,以及所继承的基类的public成员
	但是这里是保护继承的派生类对象,基类中的public,protected成员对于这个保护继承的派生类的对象而言也变成了private,所以私有继承的派生类对象无法访问基类中的所有成员了
	派生类对象的成员函数 可以调用自己的所有成员,以及基类的所有公共、保护成员(见上面)
	但是此时基类中的public,protected成员对于这个保护继承的派生类的对象而言也变成了private,所以这个时候私有继承的派生类对象的成员函数无法访问任何基类中的成员*/

	保护继承的派生类的公共继承的再派生类对象.保护继承的派生类公共函数();
	私有继承的派生类的公共继承的再派生类对象.私有继承的派生类公共函数();
}

如果大家在代码中发现了问题,欢迎在评论区留言,我会及时修改,谢谢啦!

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值