【C++11新标准】 类的构造函数的个数到底包含不包含默认构造函数?

写在最前

  最近在用淘宝上买的《未来教育》模拟考试软件刷C++二级的真题,遇到有一条颇有争议的题目,根据C++标准,题目的解析是有问题的,下面来分析一下。

原题:
  有如下类定义:
    class MyClass{
      int value;
    public:
      MyClass(int n):value(n) { }
      int getValue() const { return value;}
    };
  则类MyClass的构造函数的个数是()。
  A.1个
  B.2个
  C.3个
  D.4个
  【未来教育解析】本题考查类的默认构造函数和自定义的构造函数。本题中MyClass(int n):value(n){ }为自定义的构造函数,加上默认构造函数,一共有2个构造函数。故本题答案为B选项。

  【个人解析】根据C++的标准,如果程序已定义构造函数,默认情况下编译器就不再隐含生成默认构造函数。如果此时依然希望编译器隐含生成默认构造函数,可以使用“=default”。如:
  class MyClass{
    int value;
  public:
    MyClass() = default;
    MyClass(int n):value(n) { }
  };
  此时类MyClass一共有三个构造函数:自定义的构造函数和编译器隐含生成的默认构造函数和默认复制构造函数。

  未来教育给的答案虽然是正确的,但是解析是错误的。原题的正确解析应该是:有两个构造函数,自定义构造函数和默认复制构造函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值