在C++中,"::"和"."都是用于访问类的成员(包括成员函数和成员变量)的运算符,但它们有一些重要的区别。
"::"被称为作用域解析运算符,用于访问全局作用域、命名空间和类的静态成员。例如,假设有一个名为"MyClass"的类,它有一个名为"myStaticVariable"的静态变量,那么可以使用"::"来访问它,如下所示:
MyClass::myStaticVariable;
另一个例子是,假设有一个名为"myNamespace"的命名空间,其中包含一个名为"myVariable"的变量,那么可以使用"::"来访问它,如下所示:
myNamespace::myVariable;
"."用于访问类的非静态成员。例如,假设有一个名为"MyClass"的类,它有一个名为"myMemberVariable"的非静态变量和一个名为"myMemberFunction()"的成员函数,那么可以使用"."来访问它们,如下所示:
MyClass obj;
obj.myMemberVariable;
obj.myMemberFunction();
需要注意的是,"."只能用于访问对象的成员,而"::"可以用于访问类和命名空间的静态成员,也可以用于访问全局作用域的变量和函数。
在C++中,静态变量是指在程序生命周期内只被初始化一次的变量。与普通变量不同,静态变量的生命周期与程序的整个运行期间相同,它们在程序开始运行时被初始化,在程序结束时被销毁。静态变量可以在函数内或类中定义。
在函数内部定义的静态变量将保持其值,直到程序退出为止,它们被初始化为零或与表达式相关的值,只在函数首次调用时进行初始化。例如,下面的代码定义了一个名为"count"的静态变量,它的值将一直保留在程序的整个运行期间:
void myFunction()
{
static int count = 0; // 静态变量
count++;
std::cout << "count is: " << count << std::endl;
}
int main()
{
myFunction(); // 输出 count is: 1
myFunction(); // 输出 count is: 2
myFunction(); // 输出 count is: 3
return 0;
}
在类中定义的静态变量可以被所有类对象共享,它们的内存空间只在程序启动时分配一次,并且可以在类的成员函数之外进行初始化。例如,下面的代码定义了一个名为"count"的静态变量,它被所有MyClass对象共享:
#include <iostream>
class MyClass
{
public:
static int count; // 静态变量
};
int MyClass::count = 0; // 在类外初始化静态变量
int main()
{
MyClass obj1;
MyClass obj2;
obj1.count++;
obj2.count++;
std::cout << "obj1.count is: " << obj1.count << std::endl;
std::cout << "obj2.count is: " << obj2.count << std::endl;
std::cout << "MyClass::count is: " << MyClass::count << std::endl;
return 0;
}
这个程序中,类MyClass定义了一个静态变量count,并在类外初始化为0。在main()函数中,创建了两个MyClass类的实例obj1和obj2,并通过obj1.count++和obj2.count++递增了静态变量count的值。
接着,程序使用std::cout输出了三个值:obj1.count、obj2.count和MyClass::count。由于静态变量是所有实例共享的,因此它们的值应该是相等的,都为2。运行程序后,输出应该是:
obj1.count is: 2
obj2.count is: 2
MyClass::count is: 2
最后,程序返回0表示正常结束。