您的位置:首页 > 其它

类中的常量, const对象和成员函数

2015-09-14 17:51 120 查看
常量

起初读者可能认为合乎逻辑的选择是把一个const放在类里,但这不会产生预期的结果。在一个类里,const 恢复它在C中的一部分意思。

它在每个类对象里分配存储并代表一个值,这个值一旦被初始化以后就不能改变。在一个类里使用const的意思是“在这个对象声明期内,这个是一个常量”。

然而,对这个常量来讲,每个不同的对象可以含一个不同的值。

把一个内部数据类型封装在一个类里以保证用构造函数初始化,是很用的。例如

class interger
{
int i;
public:
interger(int I = 0);
};
integer::integer(int I):i(I){};

现在,如果建立一个integer数组,他们都被自动初始化为零。

interger[100]; 与for循环和memset()相比,这种初始化不必付出更多哦的开销。很多编译器可以很容易地把他优化成一个很快的过程。

因为在类对象里进行了存储空间分配,编译器不能知道const的内容是什么,所以不能把它用作编译期间的常量。

class bunch
{
enum {size = 100};
int i[size];
};

使用enum是不会占用对象中的存储空间的,枚举常量在编译时被全部求值。

const对象和成员函数

const blob B(2);

由于编译器强调对象为const,因此它必须保证对象的数据成员在对象的寿命期内不能被改变。可以很容易地保证公有数据不能被改变,但是怎么知道哪个成员函数会改变数据,又怎么知道哪个成员函数对与const对象是“安全”的呢

如果声明一个成员函数为const函数,则等于告诉编译器可以为一个const对象调用这个函数。一个没有特别声明为const的成员函数被看成是将要修改对象中数据成员的函数,而且编译器不允许为一个const对象调用这个函数。

必须在定义和声明中加入const.

如果一个对象被定义成一个const对象,它就被放进只读存储器(ROM)中的一个候选,在头文件里,内联函数默认为内部连接--即它是static,并且只能在它被包含的编译单元看到。因此,只要他们不在相同的编译单元中声明,在内联函数和全局函数之间用同样的名字也不会在链接时产生冲突。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: