为什么这不被视为默认构造函数?

时间:2016-04-12 15:26:04

标签: c++ oop

我在默认构造函数之间感到困惑。 我有2个代码,代码A和代码B

在代码A中,我不明白为什么A(int news)不被视为默认构造函数,而代码B ParentClass(int id)被视为默认构造函数

为什么代码A无法编译,但代码B能够编译。

代码A

    class A{
public:
    int s;
       A(int news){
 s = news;
}
    void print()
    {
    cout << s;
    }
};


int main()
{
    A a;
    a.print();

}

代码B

    class ParentClass{
public:
    int id;
    ParentClass(int id){
    this->id = id;
    }

    void print(){
        cout << id <<endl;
    }
};

class ChildClass:public ParentClass
{
public:
    int id;
    ChildClass(int id):ParentClass(1)
    {
        this->id = id;
    }
};

int main()
{
    ChildClass c(2);
    c.print();
}

1 个答案:

答案 0 :(得分:5)

编辑后,问题终于变得清晰了。重写我的回答。

序。在C ++中,默认构造函数是一个没有参数的构造函数,或者它的所有参数都有默认值。它用于在未提供其他信息时创建对象。例如,

Default a;
Default* p = new A; 

在上面的代码中,调用Default的默认构造函数。

在示例A中,您尝试调用A的默认构造函数 - 因为A a调用了A的默认构造函数。由于这样的构造函数不存在,因此存在编译错误。您获得的唯一构造函数是一个带整数参数的构造函数,您可以使用以下代码来调用它:

A a(42);

在第二个示例中,您正在调用ChildClass -default(用户提供的)构造函数 - 因为ChildClass c(1)调用ChildClass接受的构造函数一个整数参数 - 你就是这样。顺便说一句,这个ChildClass构造函数调用ParentClass构造函数,它只接受一个整数参数。