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


