当前位置: 首页 > 知识库问答 >
问题:

如果我们在c中重载一个构造函数,默认构造函数是否仍然存在?[副本]

海叶秋
2023-03-14

可能的重复:
为什么默认的无参数构造函数在您创建一个带参数的构造函数时消失

我编写了以下程序

#include <iostream>
class A {
public:
    A(int i) {std::cout<<"Overloaded constructor"<<std::endl;}
}

int main() {
A obj;
return 0;
}

当我编译程序时,我得到以下错误:

没有匹配的函数来调用A::A()候选函数是:A::A(int)A::A(const A

共有3个答案

龙承德
2023-03-14

>

  • 您可以按照上面的建议编写默认构造函数,并在maing函数中写入:

    A*obj=new A();

    例如,您可以在main函数中编写

    A*obj=新的A(5)

    您可以在构造函数中设置

    public:
    A(int i=0) 
    { 
        cout << "My own  constructor!"; 
    }; 
    

    在创建该类的对象时,可以使用

    `A* obj = new A(5);`
    

    这会将变量i更改为值5
    ,或者您可以像这样初始化对象

    `A* obj = new A();` 
    

    这将使变量i保留默认值0

  • 栾景胜
    2023-03-14

    否,根据标准,默认构造函数不是在这种情况下生成的。但是,在C 11中,您可以声明您希望通过使用以下方法生成默认构造函数:

    class A {
    public:
      A() = default;
      A(int);
    };
    
    谈炳
    2023-03-14

    在这种情况下,默认构造函数的存在取决于您是否定义它。如果您自己定义另一个构造函数,它将不再隐式定义。幸运的是,它很容易带回:

    A() = default;
    

    请注意,术语“默认构造函数”指的是任何可以在没有任何参数的情况下调用的构造函数(12.1p5);不仅仅是有时隐式定义的构造函数。

     类似资料:
    • 我的问题是关于OOP(C)中的构造函数。当我在一个类中将默认构造函数定义为private,并且在main中将该类的一个对象初始化为default时,就会出现默认构造函数不可访问的错误。这很好。但我也在Public部分中使用默认参数构造函数,当我再次在main中初始化对象时,就会出现对函数重载的不明确调用。所以我的问题是,如果不能从main访问私有构造函数,那么编译器应该调用公共部分中的构造函数,这

    • 本文向大家介绍解析C++中构造函数的默认参数和构造函数的重载,包括了解析C++中构造函数的默认参数和构造函数的重载的使用技巧和注意事项,需要的朋友参考一下 C++构造函数的默认参数 和普通函数一样,构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值。 【例】 程序运行结果为: 程序中对构造函数的定义(第12-16行)也可以改写成参数初始化

    • 本文向大家介绍C++中构造函数重载,包括了C++中构造函数重载的使用技巧和注意事项,需要的朋友参考一下   当类中没有定义构造函数时,C++编译器自动提供无参构造函数和拷贝构造函数   当类中定义了任意的拷贝构造函数,C++不提供无参构造函数。 系统自动提供的构造函数   无参构造函数      函数体为空   拷贝构造函数      简单的进行成员变量的值复制      Test t1;    

    • 问题内容: 默认构造函数到底是什么?你能告诉我以下哪个是默认构造函数,它与其他构造函数有何不同? 问题答案: 他们都不是。如果定义,则不是默认值。 除非你定义另一个构造函数,否则默认构造函数是自动生成的无参数构造函数。任何未初始化的字段都将设置为其默认值。对于你的榜样,它看起来像这样假设的类型String,int以及int,那类本身是公共的: 这与 完全没有构造函数。但是,如果定义至少一个构造函数

    • 问题内容: 我知道我在这里问一些严重的101问题… 我有一些课,还有一个延伸课。在我有一个构造函数,它接受一组参数,并对其字段进行设置。派生类(例如)通常不需要进行修改。现在我的IDE给我 “ Foo中没有默认的构造函数” 。从一点点谷歌搜索,这似乎是因为“构造函数没有继承”。因此,一切都很好,但是我现在如何使它工作而不在每个派生类中复制此构造函数?我假设有一个更合理的方法? 问题答案: 使用构造

    • 实际上,我不明白无参数构造函数和默认构造函数的区别是什么。 在创建名为cFrame的Test对象时,是否调用此类的默认构造函数?