在C++中,类的权限分为公有、私有和保护三种。这些权限控制了类的成员(数据成员和成员函数)对外部代码的可见性和访问性。
-
公有(public)权限:
在公有权限下声明的成员可以被类的外部代码直接访问;公有成员在类的派生类中仍然可以被访问。 -
私有(private)权限:
在私有权限下声明的成员对于外部代码是不可见的;只有类的成员函数可以访问私有成员;私有成员不能被派生类访问,即使是公有继承也是如此。 -
保护(protected)权限:
在保护权限下声明的成员对于外部代码是不可见的;类的派生类可以访问保护成员;保护成员在派生类中仍然是保护的,对于外部代码是不可见的。
在 C++类的继承中,也对应着三种继承权限,分别是公有继承(public inheritance)、保护继承(protected inheritance)和私有继承(private inheritance)。这些权限决定了派生类如何继承基类的成员以及外部访问的方式。
-
公有继承(public inheritance):
在公有继承中,基类的公有成员在派生类中仍然是公有的,基类的保护成员在派生类中仍然是保护的,基类的私有成员不会被派生类继承。
派生类对象可以直接访问基类的公有成员,但不能访问基类的私有成员。
外部代码可以访问派生类对象中的公有成员,但不能访问保护成员或私有成员。
//基类 class Animal { public: Animal(); ~Animal(); int m_nAge; private: int testA; protected: int testB; }; //派生类(公有继承) class Cat : public Animal { public: Cat(); ~Cat(); }上述代码中的派生类就属于通过对基类进行公有继承得到,此时
Animal类中的公有成员被继承至Cat类中也是公有成员,Animal类的保护成员在Cat类中仍然是保护的,但是Animal类的私有成员不会被Cat类继承。如此时我在Cat类中对基类中的私有成员TestA和保护成员TestB进行设置/访问,那么此时可以发现私有成员TestA无法访问,保护成员TestB可以正常访问;是因为私有成员并没有被继承。
总结:
公有继承: 基类 派生类 公有成员 ---> 公有成员 保护成员 ---> 保护成员 私有成员 无法继承 -
保护继承(protected inheritance):
在保护继承中,基类的公有和保护成员在派生类中都变成了保护成员,类的私有成员依然不会被派生类继承。
派生类对象可以访问基类的公有和保护成员,但外部代码无法直接访问派生类对象的成员。
外部代码无法访问派生类对象中的任何成员。
保护继承:
//基类 class Animal { public: Animal(); ~Animal(); int m_nAge; private: int testA; protected: int testB; }; //派生类(保护继承) class Cat : protected Animal { public: Cat(); ~Cat(); }派生类
Cat:使用保护继承方式继承自Animal类,意味着基类Animal的公有和保护成员在Cat类中都变成了保护的。外部无法直接访问Cat对象的成员。Cat类中可以访问继承自Animal的公有和保护成员。
总结:
保护继承
基类 派生类
公有成员 ----> 保护成员
保护成员 ----> 保护成员
私有成员 无法继承
3.私有继承(private inheritance):
在私有继承中,基类的公有和保护成员在派生类中都变成了私有的,类的私有成员依然不会被派生类继承。
派生类对象可以访问基类的公有和保护成员,但外部代码无法直接访问派生类对象的成员。
外部代码无法访问派生类对象中的任何成员。
私有继承:
//基类
class Animal
{
public:
Animal();
~Animal();
int m_nAge;
private:
int testA;
protected:
int testB;
};
//派生类
class Cat : private Animal
{
public:
Cat();
~Cat();
}
派生类 Cat:采用私有继承方式继承自 Animal 类,这意味着基类 Animal 的公有和保护成员在 Cat 类中都变成了私有的。Cat 类中可以访问继承自 Animal 的公有和保护成员,但外部代码无法访问。
总结:
私有继承
基类 派生类
公有成员 ---> 私有成员
保护成员 ---> 私有成员
私有成员 无法继承












![[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)](https://img-blog.csdnimg.cn/direct/5d5146acc34b4cd39ca87dc51cde3c6e.png)

![[Java EE] 多线程(七): 锁策略](https://img-blog.csdnimg.cn/direct/bcc96511d96a4b8e808cecb34bc31156.png)



