当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > C++关于面向对象构造方法总结

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#的多态性

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部