C++?常量成員函數(shù)學(xué)習(xí)筆記
C++ 成員函數(shù)
C++的類中, 在成員函數(shù)的函數(shù)聲明有末尾使用const
修飾, 則表明該函數(shù)為常量成員函數(shù).
它具有以下兩個(gè)特點(diǎn):
- 常量性: 常量成員函數(shù)約定不會(huì)修改類的任何數(shù)據(jù)成員, 即在函數(shù)體內(nèi)不能修改類的任何非靜態(tài)變量和調(diào)用任何非常量成員函數(shù).
- 對(duì)象調(diào)用: 常量成員函數(shù)可以被常量對(duì)象和非常量對(duì)象調(diào)用, 對(duì)于常量對(duì)象, 只能調(diào)用常量成員函數(shù);而對(duì)于非常量對(duì)象, 常量成員函數(shù)和非常量成員函數(shù)都可以調(diào)用.
(常量調(diào)常量, 非常隨便調(diào))
常量成員對(duì)象的定義
class Myclass { public: void setName(const std::string& newName); // 非常量成員函數(shù) void print() const; // 常量成員函數(shù) private: std::string name; }; void Myclass::setName(const std::string& newName) { name = newName; } // 常量成員函數(shù), 不會(huì)修改對(duì)象自己的數(shù)據(jù) void Myclass::print() const { std::cout << "Myclass name: " << name << std::endl; } int main() { Myclass myc; myc::setName("Good"); myc::print(); // output: "Myclass name: Good" const Myclass constMycls; // constMycls是常量對(duì)象, 所以不能調(diào)用setName constMyclass::print(); // output: "Myclass name: " name是空值 }
關(guān)于常量引用
在C++中,函數(shù)參數(shù)的類型可以分為傳值調(diào)用(by value)、引用調(diào)用(by reference)和常量引用調(diào)用(by const reference)三種方式。在以上代碼中,const std::string& newName
是使用常量引用調(diào)用方式來(lái)傳遞參數(shù)。
使用const
關(guān)鍵字修飾參數(shù)類型std::string&
,表示這個(gè)引用參數(shù)是一個(gè)常量引用,即在函數(shù)內(nèi)部不允許修改傳入的參數(shù)。這樣設(shè)計(jì)的目的有以下幾點(diǎn)意義:
- 避免不必要的拷貝:使用常量引用作為參數(shù),避免了對(duì)傳入的字符串對(duì)象進(jìn)行不必要的拷貝。如果不使用引用方式,而是直接使用
std::string newName
,則在函數(shù)調(diào)用時(shí)會(huì)進(jìn)行一次拷貝構(gòu)造,可能存在性能開(kāi)銷和內(nèi)存消耗。 - 支持傳遞常量和非常量對(duì)象:使用常量引用作為參數(shù),可以接受傳入的常量字符串(const std::string)和非常量字符串(std::string),提高了函數(shù)的通用性。
- 保證不修改傳入的參數(shù):使用
const
關(guān)鍵字修飾參數(shù)類型,可以在函數(shù)內(nèi)部明確表明該函數(shù)不會(huì)修改傳入的參數(shù),提升了代碼的可讀性,并保護(hù)了傳入的字符串對(duì)象不會(huì)被意外修改。
總結(jié)
使用const std::string&
作為參數(shù)類型,既可以避免不必要的拷貝開(kāi)銷,又能夠支持傳遞常量和非常量對(duì)象,并且明確表示函數(shù)不會(huì)修改傳入的參數(shù)。這樣設(shè)計(jì)可以提高代碼的效率和可讀性。
以上就是C++ 常量成員函數(shù)學(xué)習(xí)筆記的詳細(xì)內(nèi)容,更多關(guān)于C++ 常量成員函數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++ 構(gòu)造函數(shù)中使用new時(shí)注意事項(xiàng)
本文主要介紹了C++ 構(gòu)造函數(shù)中使用new時(shí)注意事項(xiàng)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02C++實(shí)現(xiàn)廣度優(yōu)先搜索實(shí)例
這篇文章主要介紹了C++實(shí)現(xiàn)廣度優(yōu)先搜索,對(duì)于C++程序員來(lái)說(shuō)非常有借鑒價(jià)值,需要的朋友可以參考下2014-08-08C語(yǔ)言的程序環(huán)境與預(yù)處理你真的了解嗎
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的程序環(huán)境與預(yù)處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02Qt實(shí)現(xiàn)制作簡(jiǎn)單的計(jì)算器
計(jì)算器是我們生活中很常見(jiàn)的東西,它可以由多種語(yǔ)言多種方式來(lái)實(shí)現(xiàn)。本文主要介紹的是利用Qt實(shí)現(xiàn)的簡(jiǎn)易計(jì)算器的制作,文中的示例代碼講解詳細(xì),需要的可以參考一下2022-12-12C語(yǔ)言函數(shù)之memcpy函數(shù)用法實(shí)例
memcpy函數(shù)用于把資源內(nèi)存(src所指向的內(nèi)存區(qū)域)拷貝到目標(biāo)內(nèi)存(dest所指向的內(nèi)存區(qū)域),下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言函數(shù)之memcpy函數(shù)用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08