1、类外定义成员函数
class MyClass {
public:
void myFunction();
};
void MyClass::myFunction() {
// 函数体
}
在这里双冒号用来指定成员方法属于哪一个类。
2、用于访问命名空间的元素
namespace MyNamespace {
int myVariable = 42;
}
int main() {
int x = MyNamespace::myVariable;
return 0;
}
这里用来指明变量所属的命名空间。
3、用于访问静态成员
class MyClass {
public:
static int myStaticVariable;
};
int MyClass::myStaticVariable = 42;
int main() {
int x = MyClass::myStaticVariable;
return 0;
}
这里用于访问类的静态成员,这种方式并不需要一个实例便可访问。
4、用于访问基类成员
class BaseClass {
public:
void myFunction() {
// ...
}
};
class DerivedClass : public BaseClass {
public:
void myFunction() {
// ...
BaseClass::myFunction(); // 调用基类的版本
}
};
派生类中可以轻松访问基类版本的成员,减少了不少重复操作。
5、全局作用域
int x = 42;
int main() {
int x = 0;
::x = 24; // 这将修改全局变量x,而不是局部变量x
return 0;
}
6、enum class
enum class MyEnum { VAL1, VAL2 };
int main() {
MyEnum e = MyEnum::VAL1;
return 0;
}
7、别名访问
一个特定的作用域(例如命名空间或类)中定义 typedef,然后使用 :: 运算符来访问这个别名:
class MyClass {
public:
typedef int MyInt;
void print(MyInt a) {
std::cout << "a = " << a << std::endl;
}
};
int main()
{
MyClass::MyInt a = 5;
}