c++ 类的继承(一)

来源:互联网 发布:2k18欧文捏脸数据 编辑:程序博客网 时间:2024/06/10 12:34

一,基本概念

1.类的继承,指从已有的类那里继承一些特性。原有的类称为基类或父类,继承产生的类成为子类或派生类。

2.派生类的声明

class 派生类名:继承方式 基类名1, 继承方式 基类名2,...,继承方式 基类名n
{
    派生类成员声明;
};
当存在多个基类时,称为多重继承,当仅有一个基类,称为单继承。

3.继承方式分为三种,公有(public),私有(private),保护(protected)。

当继承方式为公有继承时,基类的公有成员和保护成员被继承到派生类中,而基类的私有成员在派生类中无法访问。另外,基类的公有成员和保护成员被继承后仍作为派生类的私公有成员和保护成员,也就是说派生类的所有成员都可以访问这些项,但都无法访问基类的私有成员。

当继承方式为私有继承时,基类的公有成员和保护成员都以私有成员的身份出现在派生类中,基类的私有成员在派生类中依旧不可访问。与公有继承的差别在于此时继承项变成了私有成员,因此无法在类外进行访问。

同样,保护继承是,基类的公有成员和保护成员以保护成员的形式出现在派生类中。


二,派生类的构造和析构函数

派生类的基类继承而来的成员的初始化工作还是还是由基类的构造函数完成,然后派生类中新增的成员在派生类的构造函数中初始化。

派生类构造函数的语法如下

派生类名::派生类名(参数总表):基类名1(参数表1),基类名(参数名2)....基类名n(参数名n),内嵌子对象1(参数表1),内嵌子对象2(参数表2)....内嵌子对象n(参数表n)
{
    派生类新增成员的初始化语句;
}
注:构造函数的初始化顺序并不以上面的顺序进行,而是根据声明的顺序初始化。

如果基类中没有不带参数的构造函数,那么在派生类的构造函数中必须调用基类构造函数。

派生类构造函数的执行次序

1)派生类构造函数先调用基类构造函数。

2)执行派生类构造函数本身。

同样,在派生类对象被释放时,先执行派生类析构函数,再执行其基类析构函数。

例子

#include #include using namespace std;class B1{public:    B1(int i)    {        cout<<"constructing B1 "<

因为在C类的声明中,顺序为B2,B1,B3,因此先调用基类构造函数,顺序如前,之后调用内嵌成员对象的构造函数,调用顺序按照他们在类中的声明顺序,为B1,B2,B3。


析构函数与构造函数的顺序正好相反

#include #include using namespace std;class B1{public:    B1(int i)    {        cout<<"constructing B1 "<


输出结果为:
constructing B2 2
constructing B1 1
constructing B3
constructing B1 3
constructing B2 4
constructing B3
destructing B3
destructing B2
destructing B1
destructing B3
destructing B1
destructing B2



原创粉丝点击