十二.理解Const关键字
1.Const对象
被const关键字修饰的对象,对象指针或对象引用
const User user;const User* pt = &user;const Use& pr = user;
2. 常函数
在类成员函数的形参表之后,函数体之前加上const关键字,该成员函数的this指针即具有常属性
class 类名
{
返回类型 函数名(形参表) const {
函数体;
}
}
// 非常函数 --》 没有const修饰
void getInfo(/* 隐藏一个 Integer* this */)
{}// 常函数 --》 有const修饰
void getInfo(/* 隐藏一个 const Integer* this */) const
{}
原型相同的成员函数,常版本和非常版本构成重载
-
非 常对象优先选择非 常版本,如果没有非常版本,也能选择常版本
class User
{public:
void setInfo(int age,const char* name){this->age = age;strcpy_s(this->name, name);};// 非常函数 --》 没有const修饰
void getInfo(/* 隐藏一个 Integer* this */)
{cout << "getInfo ..." << endl;
}// 常函数 --》 有const修饰
void getInfo(/* 隐藏一个 const Integer* this */) const
{cout << "getInfo const ..." << endl;
} private:int age;char name[256];}int main()
{User user; // 非 常对象user.setInfo(20,"wyd");user.getInfo(); // cout << "getInfo ..." << endl;
}
-
常 对象只能选择常版本
int main()
{User user; // 非 常对象user.setInfo(20,"wyd");user.getInfo(); // getInfo ...cout << "------------------" << endl;const User u2 = user; // 常 对象u2.getInfo(); // getInfo const ...
}
在常函数内部无法修改成员变量的值,除非该成员变量被mutable关键字修饰