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

访问说明符

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

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

概要

  • 构造函数 - 首先调用基类的构造函数,然后调用派生类的构造函数。
  • 析构函数 - 首先调用派生类的析构函数,然后调用基类的析构函数。

版权声明:
作者:RHZ
链接:https://www.rhzhz.cn/?p=965
来源:RHZ | 用文字记录工作和学习生活
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
C++|Protected 成员|访问说明符
访问说明符 到目前为止,我们只使用了public和private访问说明符。 Public成员可以从类外任何地方访问,而private成员的访问仅限于类和友元函数。 &……
<<上一篇
下一篇>>