我被问到以下课程中有多少成员:
class xClass {
private:
int u;
double w;
public:
void func();
void print() const;
xClass();
xClass(int a, double b);
};
我只看到6,但解决方案说9?
答案 0 :(得分:2)
这适用于C ++ 11。
§9.2班级成员:
类的成员是数据成员,成员函数(9.3),...
§12特别会员职能:
默认构造函数(12.1),复制构造函数和复制赋值运算符(12.8),移动构造函数和移动赋值运算符(12.8)以及析构函数(12.4)是特殊成员函数。 [注意:实现将隐式声明这些成员函数...]
这暗示了特殊成员函数确实是成员函数(不同于塔斯马尼亚虎,不是老虎),因此是9.2的意义上的类成员。
隐式声明的特殊成员函数在类说明符的结束时声明。
这意味着,特殊成员函数不会在以后阶段添加到类中(例如在编译期间);一旦定义了课程,他们就在那里。此外,即使不使用特殊成员函数,也会声明它们。
总结一下:在C ++ 11中,有11个成员。在C ++ 03中,移动构造函数和移动赋值运算符不存在,因此可能有9个成员。但是,我没有检查C ++ 03的措辞,因此可能有6个成员。
答案 1 :(得分:0)
我阅读了评论,但我不得不说你的例子中有多少班级成员很难说。我认为C ++标准描述中存在一些矛盾。例如,在第9.2节“类成员”中有说
1类定义中的成员规范声明了完整集 班级成员;没有成员可以添加到其他地方。
因此,如果在示例中遵循标准,那么确实只有6个成员,因为只有他们参与成员规范。
另根据C ++标准
类的成员是数据成员,成员函数(9.3),...
如果要查看9.3节,那么我们将看到那里没有提到构造函数,析构函数和复制和移动赋值运算符。:)它们被称为特殊成员函数。但是成员函数中没有提到特殊的成员函数。
所以你可以勇敢地说只有6个班级成员。如果有人有疑问,那就让他问C ++标准委员会。:))