::总结
1.作用域符号::
前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分
如:A,B表示两个类,在A,B中都有成员member。那么
A::member就表示类A中的成员member
B::member就表示类B中的成员member
2.是C++里的“作用域分解运算符
比如声明了一个类A,类A里声明了一个成员函数voidf(),但没有在类的声明里给出f的定义,那么在类外定义f时,就要写成voidA::f(),表示这个f()函数是类A的成员函数。例如
01 class CA {
02 public:
03 int ca_var;
04 int add(int a, int b);
05 int add(int a);
06 };
07
08 //那么在实现这个函数时,必须这样书写:
09 int CA::add(int a, int b)
10 {
11 return a + b;
12 }
13
14 //另外,双冒号也常常用于在类变量内部作为当前类实例的元素进行表示,比如:
15 int CA::add(int a)
16 {
17 return a + ::ca_var;
18 }
19
20 //表示当前类实例中的变量ca_var。
3.全局作用域符号
当全局变量在局部函数中与其中某个变量重名,那么就可以用::来区分如:
char zhou; //全局变量
void sleep()
{
char zhou; //局部变量
char(局部变量) = char(局部变量) *char(局部变量) ;
::char(全局变量) =::char(全局变量) *char(局部变量);
}
4.静态成员变量
由于静态成员变量属于类而不是对象,所以要用类成员先支付::来访问它
#include <iostream>
using namespace std;
class A
{
public:
A(int num):it(num){total++;} //构造类A并实例化该类的私有成员变量it和静态成员变量total,每构造一次,执行total加1操作
virtual ~A(){total--;} //每析构一次,执行total减1操作
virtual int get(){return it;} //定义虚函数get,该函数返回私有变量it的值
virtual void set(int age){it=age;}//定义虚函数set,该函数设置私有变量it的值
static int total; //声明一个整型静态成员变量total
private:
int it; //声明私有成员it
};
int A::total=0; //定义该静态成员变量并且将其初始化为0
int main()
{
const int max=5;int i; //定义常整型max并将其值赋为5,定义变量i
A*a[max]; //声明一个指向类A的指针数组a,并将它的元素个数设置为max
for(i=0;i<max;i++) //从0开始,循环到max的值结束,也就是5
a[i]=new A(i); //每循环一次开辟一个新空间,然后将地址保存在指针数组a的一个元素中
for(i=0;i<max;i++)
{
cout<<"该类有"<<A::total<<"个对象。\n"; //由于静态变量是属于类而不是对象的,因此要用类来访问它
cout<<"正在删除第"<<a[i]->get()<<"个对象。\n";
delete a[i]; //删除指针数组指向的各个对象,同时delete会默认调用 析构函数来销毁对象
}
return 0;
}
#include <iostream>
using namespace std;
class A
{
public:static int x;
};
int A::x=10; //注意在定义静态成员变量x的时候也要加上类名和限定符(A::)。
int main()
{
A a, b, c;
cout<<a.x<<endl<<b.x<<endl<<c.x;
return 0;
}