RHZ'S BLOG | 个人分享

  • 首页
  • 笔记
  • 小日常
  • 音乐
  • 读书
  • 软件分享
YOLO
  1. 首页
  2. 笔记
  3. C/C++
  4. 正文

C++|Protected 成员|访问说明符

2022年9月17日 195点热度 0人点赞 2条评论

访问说明符

到目前为止,我们只使用了public和private访问说明符。

Public成员可以从类外任何地方访问,而private成员的访问仅限于类和友元函数。

 正如我们以前所见,使用公共方法访问私有类变量是一个好习惯。

C++|Protected 成员|访问说明符插图

除此之外还有一个访问说明符 - protected。

protected的成员变量或函数与私有成员非常相似,唯一的区别就是 - 可以在派生类中访问它。

class Father {
 public:
  void sayHellow() {
   cout << var;
  }

 private:
  int var=0;

 protected:
  int someVar;
};

 someVar可以被Father类的所有派生类访问,而var则不行。

基类-派生类---》父类-子类
C++|Protected 成员|访问说明符插图1

继承的类型

访问说明符也被用来指定继承的类型。

注意,我们使用public来继承Father类:

class Daughter: public Father

继承的类型也支持private和protected

  • 公共继承(Public Inheritance):基类的public成员成为派生类的public成员,基类的protected成员成为派生类的protected成员。 基类的private成员永远不能直接从派生类访问,但是可以通过调用基类的public和protected成员来访问。
  • 受保护继承(Protected Inheritance):基类的public和protected成员成为派生类的受保护成员。
  • 私有继承(Private Inheritance):基类的public和protected成员成为派生类的私有成员。

 Public是最常用的继承类型,继承类型默认为Private 

在Father类中声明一个protected成员,并从Daughter类的'age'函数中访问它。

class Father {
protected:
 int var;
};
class Daughter : public Father {
public:
 void age() { 
   var = 12; 
   }
};

当继承类时,基类的构造函数和析构函数不会被继承。

但是,当派生类的对象被创建或删除时,它们将被调用。

为了进一步解释这种行为,我们来创建一个包含构造函数和析构函数的示例类:

class Father {
 public:
 Father() 
 {
  cout <<"Father构造函数"<<endl; }
 ~Father()
 {
  cout <<"Father析构函数"<<endl; }
};

在main中创建一个对象会产生一下的输出:

int main() {
  Father f;
}
/* 输出
Father构造函数
Father析构函数
*/

接下来,让我们创建一个Daughter类,使用它自己的构造函数和析构函数,并使其成为Father的派生类:

class Daughter: public Father {
public:
 Daughter()
 {
  cout <<"Daughter构造函数"<<endl;
 }
 ~Daughter()
 {
  cout <<"Daughter析构函数"<<endl;
 }
};

基于前面几题的基础上,当我们创建一个Daughter对象时会发生什么?(Daughter继承了Father,并且他们都声明了自己的构造函数与析构函数)

int main() {
  Daughter f;
}

/*输出
Father 构造函数
Daughter 构造函数
Daughter 析构函数
Father 析构函数
*/

注意,首先调用基类的构造函数,然后调用派生类的构造函数。

当对象被销毁时,派生类的析构函数被调用,然后调用基类的析构函数。

可以理解为,派生类需要它的基类才能工作,这就是为什么基类是首先设置的原因。

C++|Protected 成员|访问说明符插图2

概要

  • 构造函数 - 首先调用基类的构造函数,然后调用派生类的构造函数。
  • 析构函数 - 首先调用派生类的析构函数,然后调用基类的析构函数。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2022年9月17日

RHZ

即使单枪匹马,我亦勇敢无畏

点赞
< 上一篇
下一篇 >

文章评论

  • 头像
    כנסו לאתר

    Everything is very open with a really clear clarification of the challenges. It was really informative. Your website is extremely helpful. Thank you for sharing!

    2022年9月20日
    回复
  • 头像
    https://romantik69.co.il/

    אני מאוד ממליץ על אתר הזה כנסו עכשיו ותהנו ממגוון רחב של בחורות ברמה מאוד גבוהה. רק באתר ישראל נייט לאדי <a href="https://romantik69.co.il/">נערות ליווי</a>

    2022年10月3日
    回复
  • 取消回复
    归档
    • 2023年2月
    • 2022年12月
    • 2022年11月
    • 2022年10月
    • 2022年9月
    • 2022年8月
    • 2022年7月
    • 2022年6月
    • 2022年5月
    • 2022年4月
    • 2022年3月
    • 2022年2月
    • 2021年12月
    • 2021年11月
    • 2021年10月
    • 2021年8月
    • 2021年7月

    COPYRIGHT © 2022 RHZ的博客. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    渝ICP备2022008933号-1