一、成員函數的定義與實現
在C++中,::是作用域解析操作符,用於引用全局變量或命名空間中的變量或函數。此外,在C++中::也可用於成員函數的定義和實現中,這便是::的重載作用之一。
class MyClass { public: void func() const; }; void MyClass::func() const { // 實現函數體 }
在上述代碼中,函數func的定義和實現使用了::運算符,表示func是MyClass類的成員函數。類名和函數名之間的::運算符就是成員函數的重載操作符,表示定義函數的類是MyClass。
二、命名空間中的使用
::還可用於命名空間中的同名函數或變量的區分。雖然C++中不建議使用全局變量和函數,但在某些情況下,使用全局變量和函數仍是有必要的。此時,若命名空間中的變量和全局變量變量同名,使用::關鍵字可以直接訪問全局變量。
#include namespace myspace { int var = 0; void func() { std::cout << "namespace function" << std::endl; } } int var = 1; int main() { std::cout << myspace::var << std::endl; // 輸出:0 std::cout << ::var << std::endl; // 輸出:1 myspace::func(); // 輸出:namespace function ::func(); // 編譯出錯,未定義全局函數func return 0; }
三、指針變量的使用
::還可用於指針變量的使用。當指針變量被定義為類的成員變量時,為了在函數外訪問該變量,需要指定作用域。
class MyClass { public: int var; }; int main() { MyClass obj; obj.var = 1; // 通過對象訪問變量 MyClass* p = &obj; p->var = 2; // 通過指針訪問變量 ::p->var = 3; // 通過全局指針訪問變量 return 0; }
四、友元函數定義
::還可用於友元函數的定義,友元函數是類的友元,在類外部定義的函數可以訪問類中的私有成員和保護成員。友元函數的定義和實現也使用::運算符。
class MyClass { friend void func(); private: int var; }; void func() { MyClass obj; obj.var = 1; // 可以直接訪問類中的私有成員 } int main() { func(); return 0; }
五、總結
在C++中,::的重載作用可以用於成員函數的定義和實現、命名空間中同名變量和函數的區分、指針變量的使用和友元函數的定義。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/231720.html