写在最前
最近在用淘宝上买的《未来教育》模拟考试软件刷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一共有三个构造函数:自定义的构造函数和编译器隐含生成的默认构造函数和默认复制构造函数。
未来教育给的答案虽然是正确的,但是解析是错误的。原题的正确解析应该是:有两个构造函数,自定义构造函数和默认复制构造函数。