基类成员的public访问权限在派生类中变为_c++中的继承

类的继承,是新的类从已有类那里得到已有的特性。从另一个角度来看这个问题,从已有类产生新类的过程就是类的派生。派生类的定义class 派生类名:继承方式 基类名1,继承方式 基类名2{ 派生类成员声明}多继承和单继承的UML表示访问控制基类的成员可以有public(公有)、protected(保护)和private(私有)三种访问属性。基类的自身成员可以对基类中任何一个其他成员进行访问,...
摘要由CSDN通过智能技术生成

类的继承,是新的类从已有类那里得到已有的特性。从另一个角度来看这个问题,从已有类产生新类的过程就是类的派生。

派生类的定义

class 派生类名:继承方式 基类名1,继承方式 基类名2
{
    派生类成员声明
}

f3105362e1731a79a7b3c846ef5f8569.png
多继承和单继承的UML表示

访问控制

基类的成员可以有public(公有)、protected(保护)和private(私有)三种访问属性。

基类的自身成员可以对基类中任何一个其他成员进行访问,但是通过基类的对象,就只能访问该类的公有成员。

类的继承方式有public(公有继承)、protected(保护继承)和private(私有继承)三种。

不同的继承方式,导致原来具有不同访问属性的基类成员在派生类中的访问属性也有所不同。

  1. 派生类中的新增成员访问从基类继承的成员
  2. 在派生类外部(非类族内的成员),通过派生类的对象访问从基类继承的成员

公有继承

当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,而基类的私有成员不可直接访问。也就是说

  • 基类的公有成员和保护成员被继承到派生类中访问属性不变,仍作为派生类的公有成员和保护成员,派生类的其他成员可以直接访问它们。
  • 在类族之外只能通过派生类的对象访问从基类继承的公有成员,
  • 无论是派生类的成员还是派生类的对象都无法直接访问基类的私有成员。
//Rectangle.h
//7_1.cpp

主函数中首先声明了一个派生类的对象rect,对象生成时调用了系统所产生的默认构造函数,这个函数的功能是什么都不做。然后通过派生类的对象,访问了派生类的公有函数initR,move等,也访问了派生类从基类继承来的公有函数getX(),getY()。这样我们看到了,从一个基类以公有方式产生了派生类之后,在派生类的成员函数中,以及通过派生类的对象如何访问从基类继承的公有成员。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A. 私有继承public 成员派生是 private 的,这个说法是正确的。但是选项要求找出错误的说法,因此选项 A 不是本题的正确答案。 正确答案应该是 D. 私有继承public 成员派生是 protected 的。私有继承是一种访问控制方式,它让类的公有成员和保护成员派生变成了私有成员,不能被外部访问,只能在派生类的内部访问。私有继承的语法格式为: ```c++ class Derived : private Base { // ... }; ``` 在私有继承public 成员和保护成员都会变成派生类的私有成员,不能被外部访问,只能在派生类的内部访问。例如: ```c++ class Base { public: int m_public; // 公有成员 protected: int m_protected; // 保护成员 private: int m_private; // 私有成员 }; class Derived : private Base { public: void foo() { m_public = 1; // 派生可以访问类的公有成员 m_protected = 2; // 派生可以访问类的保护成员 // m_private = 3; // 错误:不能访问类的私有成员 } }; int main() { Derived d; // d.m_public = 1; // 错误:不能访问类的公有成员 // d.m_protected = 2; // 错误:不能访问类的保护成员 // d.m_private = 3; // 错误:不能访问类的私有成员 return 0; } ``` 在上面的例子,定义了一个 `Base` 类和一个 `Derived` 派生类。`Derived` 类使用私有继承方式继承了 `Base` 类。在 `Derived` 类,可以访问类的公有成员和保护成员,但是不能访问类的私有成员。在 `main()` 函数,不能访问派生继承类的公有成员和保护成员

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值