前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小朋友学C++(10):子类构造函数调用父类构造函数

小朋友学C++(10):子类构造函数调用父类构造函数

作者头像
海天一树
发布2018-04-17 12:12:18
1.3K0
发布2018-04-17 12:12:18
举报
文章被收录于专栏:海天一树

从哲学层面来看,子类会继承父类除private以外的所有成员。 因为构造函数是公有的,所以理所当然地会被子类继承。

程序1:

代码语言:javascript
复制
#include <iostream>
using namespace std;
class Shape
{
public:
    Shape() 
    {
        cout << "Shape's constructor method is invoked!\n";
    }
};
class Rectangle : public Shape
{
public:
    Rectangle() : Shape()
    {
        cout << "Rectangle's constructor method is invoked!\n" << endl;
    }
};
int main(int argc, char** argv) 
{
    Rectangle rec;
    return 0;   
}

运行结果:

代码语言:javascript
复制
Shape's constructor method is invoked!
Rectangle's constructor method is invoked!

分析: 这里构造函数的写法是 Rectangle() : Shape() { 子类构造函数本身的语句; } 这是先调用父类的构造函数,再执行它本身的语句。从运行结果也可以看出这一点。

那么,如果不显示调用父类的构造函数Shape()呢?父类的构造函数就不被调用了吗? 咱们可以用下面的程序来验证。

程序2:

代码语言:javascript
复制
#include <iostream>
using namespace std;
class Shape
{
public:
    Shape() 
    {
        cout << "Shape's constructor method is invoked!\n";
    }
};
class Rectangle : public Shape
{
public:
    Rectangle()
    {
        cout << "Rectangle's constructor method is invoked!\n" << endl;
    }
};
int main(int argc, char** argv) 
{
    Rectangle rec;
    return 0;   
}

运行结果:

代码语言:javascript
复制
Shape's constructor method is invoked!
Rectangle's constructor method is invoked!

分析: 从运行结果可以看出,程序1和程序2的运行结果完全一致。也就是说,Shape()即使不显示调用,实际上也会被调用。并且调用顺序优先于子类本身的构造函数。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海天一树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档