基类成员的public访问权限在派生类中变为_你了解C++中的继承吗?

1.继承基本概念

c++最重要的特征是代码重用,通过继承机制可以利用已有的数据类型来定义新的数据类型,新的类不仅拥有旧类的成员,还拥有新定义的成员。

一个B类继承于A类,或称从类A派生类B。这样的话,类A成为基类(父类)或者说A类是B类的超级类,简称超类, 类B成为派生类(子类)。

派生类中的成员,包含两大部分:

1. 一类是从基类继承过来的,一类是自己增加的成员。

2. 从基类继承过过来的表现其共性,而新增的成员体现了其个性

2.继承的格式:

Class 派生类名 : 继承方式 基类名{

//派生类新增的数据成员和成员函数

}

3.三种继承方式:

public : 公有继承

private : 私有继承

protected : 保护继承

从继承源上分:

单继承:指每个派生类只直接继承了一个基类的特征

多继承:指多个基类派生出一个派生类的继承关系,多继承的派生类直接继承了不止一个基类的特征

4.子类对父类的访问控制(子类对父类的属性,函数的访问权限)

派生类继承基类,派生类拥有基类中全部成员变量和成员方法(除了构造和析构之外的成员方法),但是在派生类中,继承的成员并不一定能直接访问,不同的继承方式会导致不同的访问权限。

派生类的访问权限规则如下:

579a3aa71af63df6f1ef83535b8b663d.png

接下来我会用代码来一一解析:

1.共有(public)派生:

//基类class A{public:int mA;protected:int mB;private:int mC;}; //1. 公有(public)继承class B : public A{public:void PrintB(){cout << mA << endl; //可访问基类public属性cout << mB << endl; //可访问基类protected属性//cout << mC << endl; //不可访问基类private属性}};//多重继承class SubB : public B{void PrintSubB(){cout << mA << endl; //可访问基类public属性cout << mB << endl; //可访问基类protected属性//cout << mC << endl; //不可访问基类private属性}};

上面都是在子类定义中对父类的属性的权限访问,其中对于public公有继承来说,父类中的public,protected的属性都能在子类中进行访问,但是private就不能访问,切记!

在类定义外,子类对象只能访问父类的public属性,请看代码示例:

void test01(){ B b;//创建一个B对象,默认调用没有参数的构造方法cout << b.mA << endl; //可访问基类public属性//cout << b.mB << endl; //不可访问基类protected属性//cout << b.mC << endl; //不可访问基类private属性}!!!因为新手,不懂用头条的编辑,请谅解。2.私有(private)派生//2. 私有(private)继承class C : private A{public:void PrintC(){cout << mA << endl; //可访问基类public属性cout << mB << endl; //可访问基类protected属性//cout << mC << endl; //不可访问基类private属性}};//3. 保护(protected)继承class D : protected A{public:void PrintD(){cout << mA << endl; //可访问基类public属性cout << mB << endl; //可访问基类protected属性//cout << mC << endl; //不可访问基类private属性}};!请勿离开,后面更精彩
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值