const對象只能訪問const成員函數(shù)
在一個對象調(diào)用其成員函數(shù)時,它隱含的一個形參this指針。
例如,我們定義了一個函數(shù)CTest::ttt();實際上在編譯器中該函數(shù)的定義就是CTest::ttt(CTest *const this),該this指針?biāo)赶虻膬?nèi)容可以改變,但是該this指針不可以被改變。當(dāng)我們用CTest的一個對象test1調(diào)用ttt函數(shù)時即test1.ttt()時,編譯器就會將它解釋為ttt(&test1),所以我們在ttt中使用this指針就可以改變對象test1的成員變量了。
但是,當(dāng)我們的對象是const對象時,即const CTest ttt;這時候表示什么意思呢,ttt的內(nèi)容是不可以改邊的,當(dāng)我們把&ttt作為一個參數(shù)傳到形參this時,矛盾出現(xiàn)了:ttt是一個常量,其成員不可以被改變;this指針的成員變量是可以改變的。如果我能正確的將ttt 的地址傳給this,那么ttt這個常量的值不是可以在this中被改變了嗎,所以,編譯器是不允許這種情況出現(xiàn)的,就提示錯誤了。故,const對象不能訪問非const成員函數(shù)。
同理,當(dāng)我們的成員函數(shù)是const成員函數(shù)時,例:CTest::ttt() const,在編譯器解釋時會將該函數(shù)解釋為CTest::ttt(const CTest * const this),this指針及其所指向的內(nèi)容都不可以被修改,前面提到的矛盾也就不存在了,所以const對象可以訪問const成員變量。