C++中继承情况下的构造函数

来源:互联网 发布:通达数据库管理软件 编辑:程序博客网 时间:2024/05/22 00:30

如果需要向基类构造函数传递实参,需要将基类包含在派生类的构造函数初始化列表中。如下:

 

 

#include <iostream>

using namespace std;

 

class Base

{

private:

    int value;

public:

    Base(int i = 0) : value(i)

    {

        cout << "con in base. value is " << value << endl;

    }

};

 

class Derived : public Base

{

private:

    int value;

public:

    Derived(int i = 1) : value(i), Base(i)

    {

        cout << "con in derived. value is " << value << endl;

    }

};

 

int main()

{

    Derived a;

}

上面的程序的输出结果为:
con in base. value is 1
con in derived. value is 1
若将程序改写成:
#include <iostream>
using namespace std;
class Base
{
private:
    int value;
public:
    Base(int i = 0) : value(i)
    {
        cout << "con in base. value is " << value << endl;
    }
};
class Derived : public Base
{
private:
    int value;
public:
    Derived(int i = 1) : value(i) //, Base(i)
    {
        cout << "con in derived. value is " << value << endl;
    }
};
int main()
{
    Derived a;
}
则输出结果为:
con in base. value is 0
con in derived. value is 1
若进一步讲程序改写成:
#include <iostream>
using namespace std;
class Base
{
private:
    int value;
public:
    Base(int i) : value(i)
    {
        cout << "con in base. value is " << value << endl;
    }
};
class Derived : public Base
{
private:
    int value;
public:
    Derived(int i = 1) : value(i)//, Base(i)
    {
        cout << "con in derived. value is " << value << endl;
    }
};
int main()
{
    Derived a;
}
则程序编译时会报错:
error: no matching function for call to 'Base::Base()'
因为派生类的构造函数会调用基类的默认构造函数,而在上面的代码中Base类没有定义默认构造函数,故报错。