C ++类成员函数

时间:2013-10-19 18:32:30

标签: c++ class

我被问到以下课程中有多少成员:

class xClass { 
 private: 
 int u; 
 double w; 

 public: 
 void func(); 
 void print() const; 
 xClass();
 xClass(int a, double b); 
}; 

我只看到6,但解决方案说9?

2 个答案:

答案 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 ++标准委员会。:))