2022.01.14.const

#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;
}

 

posted @ 2023-01-06 13:07  Rainzzxy  阅读(57)  评论(0)    收藏  举报