发布网友 发布时间:2024-10-03 17:02
共1个回答
热心网友 时间:2024-11-05 08:42
游戏开发之C++继承与派生(包含访问控制)(C++基础)1.继承与派生继承是站在子类的角度上来说的,派生是站在父类的角度来说的。
继承是复用父类的功能,实现代码重用。
1.继承具有传递性;
2.继承不具有对称性;
3.基类是对派生类的抽象,派生类是对基类的具体化。
继承的声明语法: class 派生类名:权限描述符 继承父类1,权限描述符 继承父类2,...{成员列表}
TIPS:父类(基类)名必须是已定义的变量名。
????//基类A????class?A????{????public:????????A()????????{????????????std::cout?<<?__FUNCTION__?<<?"?"?<<?__LINE__?<<?std::endl;????????}????????void?PrintA()????????{????????????std::cout?<<?__FUNCTION__?<<?"?"?<<?__LINE__?<<?std::endl;????????}????};????//派生类B????//继承声明语法????class?B?:public?A????{????public:????????void?PrintB()????????{????????????std::cout?<<?__FUNCTION__?<<?"?"?<<?__LINE__?<<?std::endl;????????}????};????int?main()????{????????//调用方式????????B?b;????????b.PrintA();????????b.PrintB();????????return?0;????}2.访问控制主要体现在:
派生类成员对基类成员的访问权限。
通过派生类对象对基类成员的访问权限。
2.1 公有继承公有继承,继承之后对父类的访问权限不变。 派生类内部: ①基类的public和protected成员:访问属性在派生类中保持不变,即在派生类中也是public和protected权限。 ②基类的private成员:不可直接访问,但其仍然从基类被继承到派生类中,需要添加为友元类才可直接访问。 ③派生类的成员函数可以直接访问基类的public和protected成员,但不能直接访问基类的private成员。 派生类对象: 只能访问基类public成员。
2.2 保护继承保护继承:继承之后对父类的访问权限全部修改为保护级别,私有变量除外。 派生类内部: ①基类的public和protected成员:都已protected身份出现在派生类中。 ②基类的private成员:不可直接访问,但其仍然从基类被继承到派生类中,需要添加为友元类才可直接访问。 ③派生类的成员函数可以直接访问基类的public和protected成员,但不能直接访问基类的private成员。 派生类对象: 通过派生类对象,不可访问从基类继承的任意成员。
2.3 私有继承私有继承:继承之后类外不允许访问,所有成员修改为私有成员。 派生类内部: ①基类的public和protected成员:都以private身份出现在派生类中。 ②基类的private成员:不能直接访问。 ③派生类的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。 派生类对象: 通过派生类对象,不可以访问基类继承的任意成员。
2.4 实例????class?A????{????public:????????int?a;????//类外不允许访问,但是继承类可以访问(要求:继承权限必须是公有权限或保护权限)????protected:????????int?b;????private:????????int?c;????};????//公有继承,继承之后对父类的访问权限不变。????class?B?:public?A????{????public:????????B()????????{????????????a?=?1;//公有权限????????????b?=?2;//保护权限????????????//c?=?3;?无法访问????????}????};????//保护继承,继承之后对父类的访问权限全部修改为保护级别,私有变量除外。????class?C?:protected?A????{????public:????????C()????????{????????????a?=?1;//保护权限????????????b?=?2;//保护权限????????????//c?=?3;无法访问????????}????};????//私有继承,继承之后类外不允许访问,所有成员修改为私有成员。????class?D?:private?A????{????public:????????D()????????{????????????a?=?1;//私有权限????????????b?=?2;//私有权限????????}????};????int?main()????{????????B?b;????????//基类的protected和private无法访问,只能访问public权限的成员变量????????b.a?=?1;????????//基类的所有成员变量均不可直接访问????????C?c;????????//基类的所有成员变量均不能直接访问????????D?d;????????//说明基类的private也被继承下来,只是无法直接访问????????sizeof(b);//12????????sizeof(c);//12????????sizeof(d);//12????????return?0;????}2.5 总结  即不管是共有、保护、私有继承,派生类内部依然遵照基类的规则。而派生类对象则会发生改变。 版本声明:本文为CSDN博主[ufgnix0802]的原创文章。\ 原文链接:(https://blog.csdn.net/qq135595696/article/details/119941144)
原文:https://juejin.cn/post/7095289847908139016