11.1.4 考点4:数据成员的定义
定义类的数据成员时,应注意以下几点。
① 在类体内不能对数据初始化操作,数据初始化由构造函数完成。
② 自身类的对象不能作为这个类的数据成员,而自身类的指针或引用则是可以的。
③ 当另一个类的对象作为这个类的数据成员时,如果另一个类的定义在后,则需要提前声明。
请看以下MyClass类数据成员的定义:
class HisClass;
class MyClass
{
private:
int data1; // 正确。
int data2 = 0; // 错误。
MyClass obj1; // 错误。
MyClass& obj2; // 正确。
MyClass* p; // 正确。
HisClass obj3; // 正确。
HerClass obj4; // 错误。
};
11.1.5 考点5:成员函数的定义
类中的成员函数可以有两种定义。
① 将成员函数的实现直接写在类中(称之为内联函数)。
② 在类的定义体中只写出函数的原型说明,而成员函数实现写在类的定义之外,其定义的一般格式为:
<返回值类型> <类名>::<成员函数名>(参数说明)
{
函数体;
}
此处的“::”符号称为作用域运算符,不同的类的成员函数可以具有相同的名字,因此需要用作用域运算符“::”来指明哪个成员函数(数据成员)属于哪个类。成员函数既可以是有参函数,也可以是无参函数。
在类的成员函数中可以直接访问类的数据成员。但是,如果在成员函数中定义了同名的局部变量时,则必须用作用域运算符“::”来指定,以免混乱。
在类定义体中实现的函数都是内联函数。在定义体外实现的函数可以通过在函数说明和定义时分别加上inline关键字来表示该函数是内联的,否则均不属于内联函数。
小技巧:成员函数的实现可以写在类体内,也可以写在类体外。
本章节内容来自希赛全国计算机等级考试用书《计算机等级考试考点分析、题解与模拟——二级C++语言》。(购书请见 :http://shop.csai.cn/itbook/itbookinfo.asp?lbbh=10032460)