1.const数据成员
(1)const数据成员必须使用初始化参数列表
(2)不能修改
(3)不能修改必须初始化
class MM {
public:MM() {}MM(int age, string name) :age(age), name(name) {}~MM() {cout << "调用析构函数" << endl;}void print() {cout << age << name << endl;}
private:int age;const string name;
};
int main() {MM mm(25, "wangjianghui");mm.print();return 0;
}
2.const常成员函数
1.const使用位置:在函数名称后面
2.常成员函数特点:函数中不可修改常成员函数
3.常成员函数与普通函数可同时存在
4.对象
(1)普通对象优先使用普通函数
(2)常对象只能调用常成员函数
1.代码
(1)类
class MM { public:MM() {}MM(int age, string name) :age(age), name(name) {}~MM() {}void print();void print()const;void max(MM mm)const;void min(MM mm); private:int age;string name; };
(2)函数实现
void MM::print() {cout <<"普通函数: " << age << name << endl; } void MM::print()const {//const使用位置:在函数名称后面cout << "常函数: "<< age << name << endl; } void MM::max(MM mm)const {if (age > mm.age) {cout << age << name << "更大" << endl;}else {cout << mm.age << mm.name << "更大" << endl;} } void MM::min(MM mm) {if (age < mm.age) {cout << age << name << "更小" << endl;}else {cout << mm.age << mm.name << "更小" << endl;} }
(3)main
int main() {MM mm1(18,"sadf");const MM mm2(20, "agre");MM const mm3(30, "wers");//输出mm1.print();//普通对象优先使用普通函数mm2.print();//常对象只能调用常成员函数mm3.print();//比较mm1.max(mm2);//正确,普通对象可以使用常函数mm1.min(mm2);mm1.max(mm3);mm1.min(mm3);mm2.max(mm3);//mm2.min(mm3);//错误,常对象不可使用普通函数return 0; }
结果:
补充:const char *、char* const
1.const char* s; 指向常量的指针,故无法用指针去修改常量。
const char* str1="Ilove";//(const修饰char*)指向常数,不可通过指针修改 //str1[0] = 'a';//错误,无法通过指针修改
2.char* const s; 指针本身是常量,故指针不可修改指向。
char s[] = "Ilove"; char* const str2 = s;//(const修饰str2)指针为常数,不可修改指针 str2[0] = 'a'; //str2 = nullptr;//错误,指针指向(地址)无法修改
以下有详细的解释
const char *、char const*、char *const三者的区别 - 知乎 (zhihu.com)