C++ “::” 作用域符 双冒号

作用域符::在C++中用于指定全局、类和命名空间的作用域,帮助区分不同上下文中的变量和函数。它能降低代码出错率,如全局变量::a、类A的成员函数A::f()、命名空间std的成员std::cout。作用域符在类外定义成员函数、引用成员变量时尤其关键。
摘要由CSDN通过智能技术生成

https://blog.csdn.net/qq_33266987/article/details/53689133

一、

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

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~~~~~~~~~


二、

(1)表示“域操作符”

例:声明了一个类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、全局作用域符号:当全局变量在局部函数中与其中某个变量重名,那么就可以用::来区分,如:

    
    
  1. charzhou; //全局变量
  2. voidsleep()
  3. {
  4. charzhou; //局部变量
  5. char(局部变量) = char(局部变量) * char(局部变量) ;
  6. :: char(全局变量) =:: char(全局变量) * char(局部变量);
  7. }

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

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


   
   
  1. classCA {
  2. public:
  3. intca_var;
  4. intadd(inta, intb);
  5. intadd(inta);
  6. };
  7. //那么在实现这个函数时,必须这样书写:
  8. intCA::add(inta, intb)
  9. {
  10. returna + b;
  11. }
  12. //另外,双冒号也常常用于在类变量内部作为当前类实例的元素进行表示,比如:
  13. intCA::add(inta)
  14. {
  15. returna + ::ca_var;
  16. }
  17. //表示当前类实例中的变量ca_var。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值