C++中派生类的构造函数(析构函数后面再出)

                    正确的说法是基类的普通成员函数可以被继承,可以通过派生类的对象访问,类的构造函数、析构函数不能被继承。而我的理解是构造函数被继承了,但它们的名字和派生类的名字是不一样的,不能成为派生类的构造函数,因此我们就要进行显示的调用基类的构造函数对基类继承过来的数据进行初始化。

        派生类也是类,那么它的初始化也是调用构造函数来初始化,这时我们就可以定义派生类的构造函数,在里面添加对基类构造函数调用,这样我们就能够对派生类自己添加的数据成员进行初始化的同时,也能对有基类继承过来的数据成员进行初始化,即能对派生类的所有数据进行初始化了。

        如下面的例子 

  • #include <iostream>
    using namespace std;
    class A {
    public:
        A(int a = 0) :x(a) { }//构造函数

        void s() { cout << "x=" << x  << endl; }


    private:

        int x;
    };
    class D :public A {
    public:
        D(int a = 0, int b = 0) :A(a), z(b) { }//A(a)调用的是A类的A()这个构造函数,若基类有默认构造函数(有默认参数的构造函数或无参数的构造函数)也可不用显式调用,系统将自动调用基类的默认构造函数,即  D(int a = 0, int b = 0) :z(b) { } 当然如果没有默认构造函数,还不显式调用,那么将编译失败 ,注意类中已经显式定义了构造函数,编译器不会再生成默认的构造函数。

        void get() {
             s();
            cout << "z=" << z << endl;
        }

    private:

        int z;
    };
    int main()
    {
        A b(4); D c(5, 6);
        cout << "A类"; b.s();
        cout << "D类"<<endl;
        c.get();
        return EXIT_SUCCESS;

    }

运行结果为:

A类x=4

D类

x=5

z=6

        请注意派生类定义的这一行D(int a = 0, int b = 0) :A(a), z(b) { }调用基类构造函数只能在派生类的参数初始化列表,它们之间以逗号隔开。如

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

heroisppp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值