首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解默认构造函数c++

了解默认构造函数c++
EN

Stack Overflow用户
提问于 2013-02-24 02:20:46
回答 1查看 185关注 0票数 0
代码语言:javascript
复制
class WithCC { // With copy-constructor
public:
  // Explicit default constructor required:
  WithCC() {}
  WithCC(const WithCC&) {
    cout << "WithCC(WithCC&)" << endl;
  }
};

class WoCC { // Without copy-constructor
  string id;
public:
  WoCC(const string& ident = "") : id(ident) {}
  void print(const string& msg = "") const {
    if(msg.size() != 0) cout << msg << ": ";
    cout << id << endl;
  }
};

class Composite {
  WithCC withcc; // Embedded objects
  WoCC wocc;
public:
  Composite() : wocc("Composite()") {}
  void print(const string& msg = "") const {
    wocc.print(msg);
  }
};

对于上面的代码,作者说:“WoCC类没有拷贝构造函数,但它的构造函数会将一条消息存储在一个内部字符串中,该字符串可以使用print( ).This构造函数在Composite’s构造函数初始化器列表中显式调用来打印输出。”

为什么必须在Composite的构造函数中显式调用WoCC构造函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-24 02:31:14

您可以省略显式构造,因为wocc将是隐式默认构造的。默认构造函数是不带参数的构造函数。WoCC有一个默认的构造函数,因为接受string的构造函数具有该字符串的默认值。

仅当您想要传递特定字符串时,才需要显式调用构造函数,就像本例中所发生的那样。

但是,如果参数没有默认值(删除= ""),那么您确实必须在Composose中显式调用正确的构造函数。这是因为定义任何自己的构造函数都会阻止编译器隐式地生成默认的构造函数。如果它没有默认构造函数,则需要确保为wocc成员调用了正确的构造函数。

此外,WoCC确实有一个复制构造函数。如果您没有定义一个隐式复制构造函数,则编译器会生成一个隐式复制构造函数(如果您提供了一个delete构造函数,编译器只会将其定义为move d)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15043933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档