C++中派生类的构造函数

类型转换

  • 公有派生类对象可以被当做基类的对象使用,反之则不可。

    • 派生类的对象可以隐含转换为基类对象;

    • 派生类的对象可以初始化基类的引用;

    • 派生类的指针可以隐含转换为基类的指针。

  • 通过基类对象名、指针只能使用从基类继承的成员。

类型转换规则举例

以上结果是均调用base1的display()函数

不要重新定义继承而来的非虚函数

派生类的构造函数

默认情况下

  • 基类的构造函数不被继承;

  • 派生类需要定义自己的构造函数

C++规定

  • 可以用using语句继承基类构造函数;

  • 但是只能初始化从基类继承的成员。

  • 语法形式:

    • using B::B

若不继承基类的构造函数

  • 派生类新增成员:派生类定义构造函数初始化;

  • 继承来的成员:自动调用基类构造函数进行初始化;

  • 派生类的构造函数需要给基类的构造函数传递参数。

单继承时构造函数的定义语法:

  • 派生类名::派生类名(基类所需的形参,本类成员所需的形参):基类名(参数表),本类成员初始化列表

{

    //其他初始化;

};

#include<iostream>

using namespace std;

class B{

private:

     int b;

public:

     B();

     B(int i);

     ~B();

     void print() const;

};

B::B(){

     b = 0;

     cout<<"B的默认构造函数"<<endl;

}

B::B(int i){

     b = i;

     cout<<"B的带参数构造函数"<<endl;

}

B::~B(){

     cout<<"B的析构函数"<<endl;

}

void B::print() const{

     cout<<b<<endl;

}

class C:public B{

private:

     int c;

public:

     C();

     C(int i,int j);

     ~C();

     void const print();

};

C::C(){

     c = 0;

     cout<<"C的默认构造函数"<<endl;

}

C::C(int i,int j):B(i){

     c = j;

     cout<<"C的带参构造函数"<<endl;

}

C::~C(){

     cout<<"C的析构函数"<<endl;

}

void const C::print(){

     B::print();

     cout<<c<<endl;

}

int main(){

     C obj(5,6);

     obj.print();

     return 0;

}

B的带参数构造函数

C的带参构造函数

5

6

C的析构函数

B的析构函数

发布了34 篇原创文章 · 获赞 45 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/one_super_dreamer/article/details/81914680