首先介绍一下C++中的结构。对于一个结构来说,struct MyStruct {int member_a;};
如果有个变量MyStruct s,那么使用其中的成员元素时可以用s.member_a = 1;
如果采用指针方法访问,比如MyStruct * ps,那么同样的访问必须用箭头号:
ps->member_a = 1;
::只用在类成员函数和类成员变量中。比如,声明一个类:?
123456 | class CA { public: int ca_var; int add(int a, int b); int add(int a);}; |
另外,双冒号也常常用于在类变量内部作为当前类实例的元素进行表示,比如:
int CA::add(int a){return a + ::ca_var;}
表示当前类实例中的变量ca_var。
c++中当定义类对象是指针对象时候,就需要用到->指向类中的成员;当定义一般对象时候时就需要用到"."指向类中的成员.......例如:?12345 | class A { public : play(); }
|
如果定义如下:
A *p则:p->play()使用; 左边是结构指针。A p 则:p.paly()使用; 左边是结构变量。
(1)表示机构内位域的定义(即该变量占几个bit空间)typedef struct _XXX{unsigned char a:4;unsigned char c;} XXX;(2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。struct _XXX{_XXX() : y(0xc0) { }};(3) public:和PRivate:后面的冒号,表示后面定义的所有成员都是公有或私有的,直到下一个"public:”或"private:”出现为止。"private:"为默认处理。(4)类名冒号后面的是用来定义类的继承。
class 派生类名 : 继承方式 基类名{派生类的成员};继承方式:public、private和protected,默认处理是public。
(1)表示“域操作符”例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时, 就要写成void A::f(),表示这个f()函数是类A的成员函数。(2)直接用在全局函数前,表示是全局函数例:在VC里,你可以在调用API 函数里,在API函数名前加 ::(3)表示引用成员函数及变量,作用域成员运算符例:System::Math::Sqrt() 相当于System.Math.Sqrt()——————————————————————————————————————VC中如下::是C++里的“作用域分解运算符”。比如声明了一个类A,类A里声明了一个成员函数voidf(),但没有在类的声明里给出f的定义,那么在类外定义f时,就要写成voidA::f(),表示这个f()函数是类A的成员函数。 :: 一般还有一种用法,就是直接用在全局函数前,表示是全局函数。当类的成员函数跟类外的一个全局函数同名时,考试,大提示在类内定义的时候,打此函数名默认调用的是本身的成员函数;如果要调用同名的全局函数时,就必须打上::以示区别。比如在VC里,你可以在调用API函数时,在API函数名前加::。
*********************************************************************************************
这篇文章将总结C/C++中的冒号的用法。
1、位域定义这个在前面关于位结构体的文章里说得够多的了,不再重复了。2、类构造函数(Constructor)的初始化列表先说下什么叫构造函数吧(是不是啰嗦了?C++的人应该都知道了吧,还是以防万一一下)。所谓构造函数,就是与类同名的函数,它与普通函数的区别在于,它没有返回类型。在构造函数后面紧跟着冒号加初始化列表,各初始化变量之间以逗号(,)隔开。下面举个例子。
?123456789101112 | classmyClass{ public: myClass();// 构造函数,无返回类型,可以有参数列表,这里省去 ~myClass();// 析构函数 inta; constintb;} myClass::myClass():a(1),b(1)// 初始化列表{} |
12345 | myClass::myClass(){ a =1;// 没错,效果相当于在初始化列表中进行初始化 b =1;// 出错,const变量不能进行赋值操作;} |
123 | myClass::myClass():b(1),a(b){} |
*********************************************************************************************
1、作用域符号::的前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分如:A,B表示两个类,在A,B中都有成员member。那么A::member就表示类A中的成员memberB::member就表示类B中的成员member
2、
全局作用域符号:当全局变量在局部函数中与其中某个变量重名,那么就可以用::来区分如:
?
12345678910111213 | charzhou;//全局变量 voidsleep() { charzhou;//局部变量 char(局部变量) = char(局部变量) *char(局部变量) ; ::char(全局变量) =::char(全局变量) *char(局部变量); } |
::是C++里的“作用域分解运算符”。比如声明了一个类A,类A里声明了一个成员函数voidf(),但没有在类的声明里给出f的定义,那么在类外定义f时,就要写成voidA::f(),表示这个f()函数是类A的成员函数。例如
?
1234567891011121314151617181920 | classCA { public: intca_var; intadd(inta,intb); intadd(inta); }; //那么在实现这个函数时,必须这样书写: intCA::add(inta,intb) { returna + b; } //另外,双冒号也常常用于在类变量内部作为当前类实例的元素进行表示,比如: intCA::add(inta) { returna + ::ca_var; } //表示当前类实例中的变量ca_var。 |
新闻热点
疑难解答
图片精选