讲师博文
C++关于面向对象构造方法总结 来源 : 未知     2018-09-29

这里总结下C++中关于子类继承父类后构造方法的调用问题

1.首先看下这种情况

//父类

class parent

{

public:

    parent(int b){cout<<"parent has parame b = "<<b<<endl;}

};

//子类

class child : public parent

{

public:

    child(int a){cout<<"child has parame a = "<<a<<endl;}

};

//main函数

#include "child.h"

int main()

{

    child a(5);

}

父类和子类各有一个带整形形参的构造方法,此时编译程序,是有错误的,如下

F:\qt_program\cpp_test\child.h:-1: In constructor 'child::child(int)':

F:\qt_program\cpp_test\child.h:9: error: no matching function for call to 'parent::parent()'

     child(int a){cout<<"child has parame a = "<<a<<endl;}

什么意思呢?就是说在构造child类时候,调用了父类构造方法parent,但是这个构造方法必须不带参数,

而父类中是没有这么一个方法的,所以会产生这个错误。

2.我们把父类改为如下形式,加入一个不带形参的构造方法

class parent

{

public:

    parent(){cout<<"parent no parame"<<endl;}

    parent(int b){cout<<"parent has parame b = "<<b<<endl;}

};

那么此时就编译通过了,输出信息为:

parent no parame

parent has parame b = 5

也就说在子类实例化过程中,首先默认调用了父类无参构造函数,然后再调用子类构造函数

3.那么如果我们子类想调用父类的带参构造函数怎么办呢?就需要对子类作如下修改:

class child : public parent

{

public:

    child(int a):parent(6)

    {cout<<"child has parame a = "<<a<<endl;}

};

这样子类在构造时候,会默认先调用父类带参构造,然后在调用子类相应构造方法

扫码申领本地嵌入式教学实录全套视频及配套源码

上一篇:Hi3515 start.S文件分析

下一篇:浅析C#的多态性

400-611-6270

Copyright © 2004-2024 华清远见教育科技集团 版权所有
京ICP备16055225号-5京公海网安备11010802025203号