const数据成员
-
const类型变量--->常属性--->不可以修改,只读模式
-
一旦做了第一次初始化就不可以修改
-
必须采用初始化参数列表方式进行初始化
class MM
{
public:
MM(string name, int num) :num(num)
{
MM::name = name;//普通数据成员可以赋值的方式,也可以用初始化列表的方式
MM::num = 1001; //报错: const数据成员必须要用初始化参数列表方式初始化
}
void print()
{
num = 1001; /*报错: 只读模式 只能使用,不能修改*/
cout << name << " " << num << endl;
}
protected:
string name;
const int num; //const数据成员可以直接初始化 const int num=111;
};
int main()
{
MM mm("对象", 18);
mm.print();
return 0;
}
const成员函数
-
写法上,const写在函数后面
-
常成员函数不能修改数据成员--->只读数据成员
-
常成员函数可以与普通函数同时存在,同名函数,可以看作重载
·普通函数和常成员函数函数名相同(同时存在)时,普通对象优先调用普通函数--->门当户对
·普通对象可以调用常成员函数(只存在常成员函数的时候)
class MM
{
public:
MM(string name, int num) :num(num)
{
MM::name = name;
}
//普通函数
void print()
{
cout << name << " " << num << endl;
}
//常成员函数: 函数名和普通函数可以完全一样
void print()const
{
/*name = "修改"; 报错:常成员函数不能修改数据成员
num = 199;*/
cout << name << " " << num << endl;
cout << "常成员函数" << endl;
}
protected:
string name;
const int num; //const数据成员
};
int main()
{
MM mm("对象", 18);
mm.print(); //普通对象调用普通函数
const MM cmm("常对象", 20);
cmm.print(); //常对象调用常成员函数
return 0;
}
小知识:
两个函数都有,想调用const成员函数怎么办?用const对象
const对象
-
用const修饰的对象
-
常对象只能调用常成员函数--->不能调用普通函数
普通对象也不能强制调用const成员函数(当存在普通函数的时候)
class MM
{
public:
MM(string name, int num) :num(num)
{
MM::name = name;
}
//普通函数
void print()
{
cout << name << " " << num << endl;
}
//普通函数
void printData()
{
cout << "普通函数" << endl;
}
//常成员函数
void print()const
{
cout << name << " " << num << endl;
cout << "常成员函数" << endl;
}
protected:
string name;
const int num; //const数据成员
};
int main()
{
const MM cmm("常对象", 20);
cmm.print(); //常对象只能调用常成员函数
cmm.printData(); //报错: 常对象不能调用普通函数
return 0;
}