本篇内容主要讲解“C或c++中公有继承,保护继承和私有继承的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C或c++中公有继承,保护继承和私有继承的区别是什么”吧!
<强> C/c++公有继承,保护继承和私有继承的区别强>
,,在c++的继承控制中,有三种不同的控制权限,分别是公共的,和私人保护。定义派生类时,若不显示加上这三个关键字,就会使用默认的方式,用结构定义的类是默认公共继承,类定义的类是默认私人继承。这和Java有很大的不同,Java默认使用公共继承,而且只有公有继承。
,,,,,,,1 .使用公共继承时,派生类内部可以访问基类中公共的和受保护的成员,但是类外只能通过派生类的对象访问基类的公共成员。
,,,,,,,(1)基类的公共成员在派生类中依然是公共的。
,,,,,,,(2)基类中保护的成员在派生类中依然是受保护的。
,,,,,,,(3)基类中的私人成员在派生类中不可访问。
,,,,,,,2。使用保护继承时,派生类内部可以访问基类中公共的和受保护的成员,并且类外也不能通过派生类的对象访问基类的成员(可以在派生类中添加公有成员函数接口间接访问基类中的公共的和受保护的成员)。
,,,,,,,(1)基类的公共成员在派生类中变为保护成员。
,,,,,,,(2)基类的保护成员在派生类中依然是保护成员。
,,,,,,,(3)基类中的私人成员在派生类中不可访问。
,,,,,,3。使用私人继承时,派生类内部可以访问基类中公共的和受保护的成员,并且类外也不能通过派生类的对象访问基类的成员(可以在派生类中添加公有成员函数接口间接访问基类中的公共的和受保护的成员)。
,,,,,,,(1)基类的公共成员在派生类中变成私人成员。
,,,,,,,(2)基类的保护成员在派生类中变成私人成员。
,,,,,,,(3)基类的私有成员在派生类中不可访问。
,,,,,,,为了便于理解,我们用一个表格来说明这几种控制符使用的情况:,,
,,,,,,下面用代码简单叙述
# include & lt; iostream>, {class Base 公众: public_a; int 才能; virtual 才能;void 测试(),=,0;, 保护: protected_a; int 才能; 私人:, private_a; int 才能; },,//公有继承, class PublicDerived : public Base {, 公众: virtual 才能;void 测试(),{, ,,,public_a =, 1,,,,,,,,,,,//public_a 公共继承后还是公共类型, ,,,protected_a =, 2,,,,,,,,,//protected_a 还是受保护的类型, ,,,//private_a =, 3,,,,,,,,,,//派生类不可访问基类私有成员, ,,}, },,//保护继承, class ProtectedDerived : protected Base {, 公众: virtual 才能;void 测试(),{, ,,,public_a =, 1,,,,,,,,,,,//public_a 保护继承后变为受保护的类型, ,,,protected_a =, 2,,,,,,,,,//protected_a 还是受保护的类型, ,,,//private_a =, 3,,,,,,,,,//派生类不可访问基类私有成员, ,,}, },,//私有继承, class PrivateDerived : private Base {, 公众: virtual 才能;void 测试(),{, ,,,public_a =, 1,,,,,,,,,,,//public_a 私人继承后变为私人类型, ,,,protected_a =, 2,,,,,,,,,//protected_a 私人继承后变为私人类型, ,,,//private_a =, 3,,,,,,,,,//派生类不可访问基类私有成员, ,,}, };
,,,,,,,在c++中公共继承是是一个的关系。也就说适用于基类身上的一定也适用于派生类身上,因为每一个派生类对象也都是一个基类对象。派生类对象转换为基类对象在需要的时候是可以自动转化的。
,,,,,,,其实,保护和私人派生后的派生类不是基类的子类,因为此派生类不能做基类所能做的所有事情。我们看看下面的代码
# include & lt; iostream>, {class Person 公众: 人(){};才能, void 才能吃(),{std:: cout & lt; & lt;,“吃\ n";}, },,//公有继承, class PublicStudent : public Person {, 公众: PublicStudent才能(),{}, void 才能;研究(),{std:: cout & lt; & lt;,“研究\ n";}, },,//保护继承, class ProtectedStudent : protected Person {, 公众: ProtectedStudent才能(),{}, void 才能;研究(),{std:: cout & lt; & lt;,“研究\ n";}, },,//私有继承, class PrivateStudent : private Person {, 公众: null null null null null null null null null null null null null null null null null null null null null null null null nullC或c++中公有继承,保护继承和私有继承的区别是什么