一、成員函數的定義與實現
在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-tw/n/231720.html
微信掃一掃
支付寶掃一掃