在C++中 ,什么时候用:: ?什么时候用. ?什么时候用->?
在 C++ 中,::
、.
和 ->
是三种不同的运算符,用于访问类、结构体、命名空间、指针等的成员。它们的使用场景如下:
-
::
(作用域解析运算符):-
用于访问命名空间的成员或静态成员。例如,假设有一个命名空间
MyNamespace
,其中定义了一个静态成员函数MyFunction
:namespace MyNamespace {void MyFunction(); }
要调用该静态成员函数,使用作用域解析运算符:
MyNamespace::MyFunction();
-
用于访问基类的成员,当派生类中有同名成员时。在 C++ 的继承中,如果派生类中定义了与基类同名的成员,那么使用作用域解析运算符可以访问基类的成员。例如:
class Base { public:void SomeFunction(); };class Derived : public Base { public:void SomeFunction(); };
要在派生类中调用基类的成员函数,使用作用域解析运算符:
void Derived::SomeFunction() {Base::SomeFunction(); // 调用基类的 SomeFunction }
-
-
.
(成员访问运算符):- 用于访问类、结构体或对象的非静态成员。例如,如果有一个类
MyClass
,其中定义了一个成员变量x
和成员函数MyFunction
:
要访问类的成员变量和成员函数,使用成员访问运算符class MyClass { public:int x;void MyFunction(); };
.
:MyClass obj; obj.x = 10; // 访问成员变量 x obj.MyFunction(); // 调用成员函数 MyFunction
- 用于访问类、结构体或对象的非静态成员。例如,如果有一个类
-
->
(指针成员访问运算符):- 用于通过指针访问对象的成员。当你有一个指向类或结构体的指针时,使用指针成员访问运算符来访问对象的成员。例如,如果有一个类
MyClass
,并且有一个指向该类对象的指针:
要通过指针访问对象的成员,使用指针成员访问运算符class MyClass { public:int x;void MyFunction(); };MyClass obj; MyClass* ptr = &obj;
->
:
注意:使用指针成员访问运算符的前提是指针不为空,否则会导致未定义行为。ptr->x = 10; // 通过指针访问成员变量 x ptr->MyFunction(); // 通过指针调用成员函数 MyFunction
- 用于通过指针访问对象的成员。当你有一个指向类或结构体的指针时,使用指针成员访问运算符来访问对象的成员。例如,如果有一个类
综上所述,根据成员的类型和访问方式,使用不同的运算符进行访问。使用 ::
来访问命名空间和基类的成员,使用 .
来访问类或结构体对象的成员,使用 ->
来通过指针访问对象的成员。