李sir_Blog

博客园 首页 联系 订阅 管理

const类对象const成员函数const成员变量

如果类对象是const类型的,则只能调用类中的const 函数,如果类的指针是const类型的,则只能调用类中的const函数
即对于const对象,c++编译器不允许进行成员函数的调用,除非成员函数本身也声明为const即使是不修改对象的获取成员函数也不行,此外,编译器还不允许声明为const的成员函数修改对象
要将函数指定为const,则既要在其原型中指定,又要在其定义中指定。方法是在函数参数列表后和函数体开始的左花括号前插入const;
定义为const的成员函数如果又调用同一类的同一实例的非const成员函数也将导致错误
将修改对象的数据成员的成员函数定义为const也将导致错误
不能将构造函数和析构函数定义为const,因为必须允许它们修改对象
非const类对象或指针则可以调用const函数和非const函数

将函数声明为const
const int GetNumber() const
{}
第一个const 表明其返回值不能被更改,即不能作为左值表达式,第二个const意思是函数不能改变对象中的值,是一个常量函数
如 void print() const{cout<<++i<<endl;}会报错

在类中,如果有const 成员变量,则只能在初始化器中将其初始化,并且只能在这里初始化

类中有static const成员变量,能不能在类中初始化要看编译器,老的编译器不支持在类中直接初始化。
const int test::i=9;
如果不能在类中为其赋值,可以采用以下方法,
class test
{
public:
static const enum {i=9};
};
能在类中为其赋值时,除了在类定义中声明表态成员变量外,还必须在实现文件中重新声明这个变量,此时,不需要关键字static,初始值只能在头文件中给出,而不是在实现文件中提供,而且,这种在头文件中定义值的方法只适用于整数类型,如
int 和size_t对于非整数类型,则必须采用将值放在头文件夹的外部,并在实现文件中定义这个值

posted on 2010-06-18 14:34  李sir  阅读(1381)  评论(0)    收藏  举报