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)