C++?常量成員函數(shù)學習筆記
C++ 成員函數(shù)
C++的類中, 在成員函數(shù)的函數(shù)聲明有末尾使用const
修飾, 則表明該函數(shù)為常量成員函數(shù).
它具有以下兩個特點:
- 常量性: 常量成員函數(shù)約定不會修改類的任何數(shù)據(jù)成員, 即在函數(shù)體內不能修改類的任何非靜態(tài)變量和調用任何非常量成員函數(shù).
- 對象調用: 常量成員函數(shù)可以被常量對象和非常量對象調用, 對于常量對象, 只能調用常量成員函數(shù);而對于非常量對象, 常量成員函數(shù)和非常量成員函數(shù)都可以調用.
(常量調常量, 非常隨便調)
常量成員對象的定義
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ù), 不會修改對象自己的數(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是常量對象, 所以不能調用setName constMyclass::print(); // output: "Myclass name: " name是空值 }
關于常量引用
在C++中,函數(shù)參數(shù)的類型可以分為傳值調用(by value)、引用調用(by reference)和常量引用調用(by const reference)三種方式。在以上代碼中,const std::string& newName
是使用常量引用調用方式來傳遞參數(shù)。
使用const
關鍵字修飾參數(shù)類型std::string&
,表示這個引用參數(shù)是一個常量引用,即在函數(shù)內部不允許修改傳入的參數(shù)。這樣設計的目的有以下幾點意義:
- 避免不必要的拷貝:使用常量引用作為參數(shù),避免了對傳入的字符串對象進行不必要的拷貝。如果不使用引用方式,而是直接使用
std::string newName
,則在函數(shù)調用時會進行一次拷貝構造,可能存在性能開銷和內存消耗。 - 支持傳遞常量和非常量對象:使用常量引用作為參數(shù),可以接受傳入的常量字符串(const std::string)和非常量字符串(std::string),提高了函數(shù)的通用性。
- 保證不修改傳入的參數(shù):使用
const
關鍵字修飾參數(shù)類型,可以在函數(shù)內部明確表明該函數(shù)不會修改傳入的參數(shù),提升了代碼的可讀性,并保護了傳入的字符串對象不會被意外修改。
總結
使用const std::string&
作為參數(shù)類型,既可以避免不必要的拷貝開銷,又能夠支持傳遞常量和非常量對象,并且明確表示函數(shù)不會修改傳入的參數(shù)。這樣設計可以提高代碼的效率和可讀性。
以上就是C++ 常量成員函數(shù)學習筆記的詳細內容,更多關于C++ 常量成員函數(shù)的資料請關注腳本之家其它相關文章!