08
2020
01

C++中"::"作用域分解运算符

作用域符

:: 是作用域符,是运算符中等级最高的,它分为三种:

1、global scope(全局作用域符),用法(::name)

2、class scope(类作用域符),用法(class::name)

3、namespace scope(命名空间作用域符),用法(namespace::name)

他们都是左关联(left-associativity),他们的作用都是为了更明确的调用你想要的变量:

1、如在程序中的某一处你想调用全局变量a,那么就写成::a;(也可以是全局函数)

2、如果想调用class A中的成员变量a,那么就写成A::a;

3、另外一个如果想调用namespace std中的cout成员,你就写成std::cout(相当于using namespace std;cout)意思是在这里我想用cout对象是命名空间std中的cout(即就是标准库里边的cout);

他们算是C++中的基础,如果运用的好的话,你程序的出错率也许会降很多,o~~~~~~~~~

域操作符

例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时, 就要写成void A::f(),表示这个f()函数是类A的成员函数。

(2)直接用在全局函数前,表示是全局函数

例:在VC里,你可以在调用API 函数里,在API函数名前加 ::

(3)表示引用成员函数及变量,作用域成员运算符

例:System::Math::Sqrt() 相当于System.Math.Sqrt();

类的成员名称

1、作用域符号::的前面一般是类名称,后面一般是该类的成员名称。

C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分。

如:A,B表示两个类,在A,B中都有成员member。那么

A::member就表示类A中的成员member,B::member就表示类B中的成员member。

2、全局作用域符号:当全局变量在局部函数中与其中某个变量重名,那么就可以用::来区分,如:

charzhou; //全局变量

voidsleep()

{

    charzhou; //局部变量

    char(局部变量) = char(局部变量) *char(局部变量) ;

    ::char(全局变量) =::char(全局变量) *char(局部变量);

}

3、::是C++里的“作用域分解运算符”。

比如声明了一个类A,类A里声明了一个成员函数voidf(),但没有在类的声明里给出f的定义,那么在类外定义f时,就要写成voidA::f(),表示这个f()函数是类A的成员函数。例如

classCA {

public: 

  intca_var;  

  intadd(inta, intb);  

  intadd(inta);  

};

   

//那么在实现这个函数时,必须这样书写: 

intCA::add(inta, intb)  

{

  returna + b;  

}

   

//另外,双冒号也常常用于在类变量内部作为当前类实例的元素进行表示,比如: 

intCA::add(inta)  

  returna + ::ca_var;  

}

//表示当前类实例中的变量ca_var。

原文链接:https://www.qiquanji.com/post/7879.html

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

gzh

微信扫码关注

更新实时通知

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。