C++公有继承、保护继承和私有继承的区别
作者:网络转载 发布时间:[ 2016/12/26 11:31:43 ] 推荐标签:测试开发技术 C++
在c++的继承控制中,有三种不同的控制权限,分别是public、protected和private。定义派生类时,若不显示加上这三个关键字,会使用默认的方式,用struct定义的类是默认public继承,class定义的类是默认private继承。这和Java有很大的不同,Java默认使用public继承,而且只有公有继承。
1.使用public继承时,派生类内部可以访问基类中public和protected成员,但是类外只能通过派生类的对象访问基类的public成员。
(1)基类的public成员在派生类中依然是public的。
(2)基类中的protected成员在派生类中依然是protected的。
(3)基类中的private成员在派生类中不可访问。
2.使用protected继承时,派生类内部可以访问基类中public和protected成员,并且类外也不能通过派生类的对象访问基类的成员(可以在派生类中添加公有成员函数接口间接访问基类中的public和protected成员)。
(1)基类的public成员在派生类中变为protected成员。
(2)基类的protected成员在派生类中依然是protected成员。
(3)基类中的private成员在派生类中不可访问。
3.使用private继承时,派生类内部可以访问基类中public和protected成员,并且类外也不能通过派生类的对象访问基类的成员(可以在派生类中添加公有成员函数接口间接访问基类中的public和protected成员)。
(1)基类的public成员在派生类中变成private成员。
(2)基类的protected成员在派生类中变成private成员。
(3)基类的private成员在派生类中不可访问。
为了便于理解,我们用一个表格来说明这几种控制符使用的情况:
派 生 方 式 基类的public成员 基类的protected成员 基类的private成员 public派生 还是public成员 变为protected成员 不可见 protected派生 变成protected成员 还是protected成员 不可见 private派生 变为private成员 变成private成员 不可见
下面用代码简单叙述
#include <iostream>
class Base {
public:
int public_a;
virtual void test() = 0;
protected:
int protected_a;
private:
int private_a;
};
//公有继承
class PublicDerived : public Base {
public:
virtual void test() {
public_a = 1; //public_a public继承后还是public类型
protected_a = 2; //protected_a 还是protected类型
//private_a = 3; //派生类不可访问基类私有成员
}
};
//保护继承
class ProtectedDerived : protected Base {
public:
virtual void test() {
public_a = 1; //public_a protected继承后变为protected类型
protected_a = 2; //protected_a 还是protected类型
//private_a = 3; //派生类不可访问基类私有成员
}
};
//私有继承
class PrivateDerived : private Base {
public:
virtual void test() {
public_a = 1; //public_a private继承后变为private类型
protected_a = 2; //protected_a private继承后变为private类型
//private_a = 3; //派生类不可访问基类私有成员
}
};
在c++中public继承是is-a的关系。也说适用于基类身上的一定也适用于派生类身上,因为每一个派生类对象也都是一个基类对象。派生类对象转换为基类对象在需要的时候是可以自动转化的。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11