问答

继承问题请教

作者:admin 2021-04-20 我要评论

请问下如下代码为何输出的是:0,0,而不是3,1? 我的理解是先构造父类,此刻i=j=0, 然后在构造子类的时候,调用父类的构造函数 Base(3, 1)的时候把3,1赋值给继承...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

请问下如下代码为何输出的是:0,0,而不是3,1?

我的理解是先构造父类,此刻i=j=0, 然后在构造子类的时候,调用父类的构造函数 Base(3, 1)的时候把3,1赋值给继承来的i,j, 最后输出的d.i,d.j应该是3,1。但是实际却不是。

class Base {
    public:
    int i;
    int j;
    Base () {
        i = j = 0;
    }
    Base (int a, int b) {
        i = a;
        j = b;
    }
};

class Derive:public Base {
    public:
    Derive (int a, int b) {
        Base(a, b);
    }
};

int main(){
    Derive d(3,1);
    cout << d.i << "," << d.j << endl; //输出是: 0,0
    return 0;
}
###
class Derive: public Base {
public:
    Derive(int a, int b): Base(a, b) {
        // 调用父类构造要像上面这么写
        // Base(a, b) 是产生了一个局部对象,而不是调用父类构造
    }
};
###
Derive (int a, int b) {
        Base(a, b);
    }

这里的 Base(a, b) 只是定义了一个 Base 类型的临时变量,说不定在编译期优化后,这条语句直接变成了,

Derive (int a, int b) {
// 没掉了这里
    }

我猜你是弄混了构造函数初始化列表,你想要的是这个,

Derive (int a, int b) : Base(a, b) {
        
    }

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器