C++ 类中的3种访问权限和继承方式

访问权限:public 可以被任意实体访问,protected 只允许子类(无论什么继承方式)及本类的成员函数访问,private 只允许本类的成员函数访问。三种继承方式分别是 public 继承,protect 继承,private 继承。

示例程序如下:

#include <iostream>
#include <String>

using namespace std;

// 基类
class student
{
public:
	string name;
protected:
	int age;
private:
	char sex;

public:
	void showStu()
	{
		cout << this->name << endl; // 1、在本类能够访问类的公有数据成员
		cout << this->age << endl;  // 1、在本类能够访问类的保护数据成员
		cout << this->sex << endl;  // 1、在本类能够访问类的私有数据成员
	}
};

// 派生类 - public继承
class public_Sub : public student
{
public:
	void show()
	{
		cout << this->name << endl; // 2、public继承,在派生类中能够访问基类的公有数据成员
		cout << this->age << endl;  // 2、public继承,在派生类中能够访问基类的保护数据成员
		//cout << this->sex << endl;  // error:2、在c类中不能访问基类的私有数据成员
	}
};

// 派生类 - protected继承
class protected_Sub : protected student
{
public:
	void show()
	{
		cout << this->name << endl; // 3、protected继承,在派生类中能够访问基类的公有数据成员
		cout << this->age << endl;  // 3、protected继承,在派生类中能够访问基类的保护数据成员
		//cout << this->sex << endl;  // error:3、在派生类中不能访问基类的私有数据成员
	}
};

// 派生类 - private继承
class private_Sub : private student
{
public:
	void show()
	{
		cout << this->name << endl; // 4、private继承,在派生类中能够访问基类的公有数据成员
		cout << this->age << endl;  // 4、private继承,在派生类中能够访问基类的保护数据成员 【即使是private继承】
		//cout << this->sex << endl;  // error:4、在派生类中不能访问基类的私有数据成员
	}
};

int main()
{
	student stu;
	cout << stu.name << endl;   // 5、在类外可以访问类的公有数据成员
	//cout << stu.age << endl;    // error,5、在类外不能访问类的保护数据成员
	//cout << stu.sex << endl;    // error,5、在类外不能访问类的私有数据成员

	return 0;
}
  • 派生类内不管是 public、protected、private 继承,总是可以 public、protected 成员,基类中的 private 成员永远不能再派生类内直接访问,不论通过哪种方式。
  • 派生类对象仅当 public 派生时,对基类中的 public 成员有可访问/可修改的权限,其他都为不可访问/不可修改。

另外,继承方式会改变从基类继承的成员在派生类的访问权限:

1、public 继承不改变基类成员的访问权限;

2、protected 继承将基类中 public 成员变为子类的 protected 成员,其它成员的访问权限不变;

3、private 继承使得基类所有成员在子类中的访问权限变为 private。

C++ 中为什么要定义 public、protect、private 这三种访问权限?

有些我们需要给外面看的,也就是对外接口,那么就是 public。如果我们不想让别人知道内部的实现细节,那么就是 private。如果我们不想让别人知道,想让自己的孩子什么的知道(这里涉及到继承),那么就可以作为 protected。

原文链接: https://www.cnblogs.com/linuxAndMcu/p/11309748.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++ 类中的3种访问权限和继承方式

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/300387

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 下午9:23
下一篇 2023年2月15日 下午9:24

相关推荐