访问说明符
到目前为止,我们只使用了public和private访问说明符。
Public成员可以从类外任何地方访问,而private成员的访问仅限于类和友元函数。
正如我们以前所见,使用公共方法访问私有类变量是一个好习惯。

除此之外还有一个访问说明符 - protected。
protected的成员变量或函数与私有成员非常相似,唯一的区别就是 - 可以在派生类中访问它。
class Father {
public:
void sayHellow() {
cout << var;
}
private:
int var=0;
protected:
int someVar;
};
someVar可以被Father类的所有派生类访问,而var则不行。
基类-派生类---》父类-子类

继承的类型
访问说明符也被用来指定继承的类型。
注意,我们使用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 析构函数
*/
注意,首先调用基类的构造函数,然后调用派生类的构造函数。
当对象被销毁时,派生类的析构函数被调用,然后调用基类的析构函数。
可以理解为,派生类需要它的基类才能工作,这就是为什么基类是首先设置的原因。

概要
- 构造函数 - 首先调用基类的构造函数,然后调用派生类的构造函数。
- 析构函数 - 首先调用派生类的析构函数,然后调用基类的析构函数。
文章评论
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!
אני מאוד ממליץ על אתר הזה כנסו עכשיו ותהנו ממגוון רחב של בחורות ברמה מאוד גבוהה. רק באתר ישראל נייט לאדי <a href="https://romantik69.co.il/">נערות ליווי</a>