這裡討論的是const在成員函式中的用法

 

1. const用在成員函式傳入變數的地方,這是一個很常看見的寫法

class ClassA {
public:
    ClassA(){}
    void Method1(const char* pcName) {
        char acModify_[10];
        ::memset(acModify_, 0, sizeof(acModify_));
        ::strcpy(acModify_, "change 1");
        //::strcpy(pcName, acModify_);
        ::printf("%s\n", pcName);
    }
    void Method2(const char* pcName) {
        char acModify_[10];
        ::memset(acModify_, 0, sizeof(acModify_));
        ::strcpy(acModify_, "change 2");
        pcName = acModify_;
        ::printf("%s\n", pcName);
    }
};

 

這邊請注意
Method1如果將註解拿掉
在編譯時是不會成功的
但是Method2會成功
而且const執行時也可以被修改
使用時請小心
至於如何防範這個問題
請參照part 1

 

2. const加在成員函式的後面

class ClassB {
public:
    ClassB():iCount(0){}
    int Method1()const
    {
        //iCount ++; // 如果此行不注解是無法編譯的
        return _iCount;
    }
    int Method2()
    {
        iCount ++;
        return iCount;
    }
private:
    int iCount;
};

若在成員函式後面加上const則此函式只能回傳資料,不能變動資料

 

3. const加在成員函式的前面

class ClassC {
public:
    ClassC(){
        ::memset(_acName, 0, sizeof(_acName));
        ::strcpy(_acName, "default");
    }
    const char* Method1()
    {
        return _acName;
    }
private:
    char _acName[20];
};

int _tmain(int argc, _TCHAR* argv[])
{
    ClassC mClassC_;
    //這裡一定要用const才能接收,所以自然也不能去修改值
    const char* pcResult_ = mClassC_.Method1();
    ::printf("%s\n", pcResult_);
}

 

BB 發表在 痞客邦 PIXNET 留言(0) 人氣()