#include<iostream>
using namespace std;
class CTest{
public:
const int m_a;
mutable int m_b;//关键字:mutable 在常函数中可以修改
//初始化参数列表:真正初始化类成员的地方,const 成员的初始化必须在初始化参数进行
//普通的成员也可以初始化,多个成员初始化用逗号分割
//初始化成员顺序,是成员在类中声明的先后顺序
CTest():m_a(10),m_b(30){
m_b=20;
}
CTest(int a):m_b(m_a),m_a(a){
cout<<m_a<<" "<<m_b<<endl;
}
//常函数:参数列表后加const修饰,const 修饰this指针
void show(/*const CTest *const this*/)const{
cout<<m_a<<" "<<m_b<<endl;
this->m_b=90;
}
void play(){
cout<<m_a<<" "<<m_b<<endl;
m_b=20;
}
};
int main(){
//const int a=10;//定义来了就要初始化,之后不能修改
//int b=20;
// const int * p1 = &a;//常量指针 const修饰的是*p
// cout<<*p1<<endl;
// p1=&b;//修改指针的指向
// //*p1=30;//不能通过当前这个指针去修改指向空间的值
// int * const p2=&b;//指针常量 const修饰的是p指针
// *p2 = 30;
// cout<<*p2<<endl;//通过指针修改指向空间里的值
// //p2=&a;//修改指针的指向
// //int * const p3 =&a;//非法
/*CTest tst;
CTest tst1(60);
cout<<tst.m_a<<" "<<tst.m_b<<endl;
cout<<tst1.m_a<<" "<<tst1.m_b<<endl;
tst1.show();
cout<<tst1.m_b<<endl;*/
const CTest tst;
//tst.play();//CTest *const this=&tst 指针安全级别降低,不允许
tst.show();//const CTest * const this=&tst;
CTest tst2;
tst2.show();//const CTest * const thid=&tst2;
system("pause");
return 0;
}