目录
1、A.B A为对象或者结构体;
2、A->B A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;
3、::是作用域运算符,A::B表示作用域A中的名称B,A可以是命名空间、类、结构;
4、:
表示继承
另一种是构造函数

1、A.B A为对象或者结构体;

C  中的.和::和:和->的区别 - 图1

此处,validationOptions是一个class对象,取他的成员。

C  中的.和::和:和->的区别 - 图2

2、A->B A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;

C  中的.和::和:和->的区别 - 图3

此处findServersRequest是一个指针,Header()为成员函数。

3、::是作用域运算符,A::B表示作用域A中的名称B,A可以是命名空间、类、结构;

C  中的.和::和:和->的区别 - 图4

此处为经常用到的std命名空间的的string对象。

1)类作用域操作符。“::”指明了成员函数所属的类。
2)表示引用成员函数及变量,作用域成员运算符。例如:System::Math::Sqrt() 相当于System.Math.Sqrt()

4、:

表示继承

C  中的.和::和:和->的区别 - 图5

类ClientCertificateValidationOptions_t 继承自 Allocatable_t。

另一种是构造函数

其实冒号后的内容是初始化成员列表,一般有三种情况:
1、对含有对象成员的对象进行初始化,例如,
类line有两个私有对象成员startpoint、endpoint,line的构造函数写成:
line(int sx,int sy,int ex,int ey):startpoint(sx,sy),endpoint(ex,ey){
……
}
初始化时按照类定义中对象成员的顺序分别调用各自对象的构造函数,再执行自己的构造函数
2、对于不含对象成员的对象,初始化时也可以套用上面的格式,例如,
类rectangle有两个数据成员length、width,其构造函数写成:
rectangle():length(1),width(2){}
rectangle(int x,int y):length(x),width(y){}
3、对父类进行初始化,例如,
CDlgCalcDlg的父类是MFC类CDialog,其构造函数写为:
CDlgCalcDlg(CWnd* pParent ): CDialog(CDlgCalcDlg::IDD, pParent)
其中IDD是一个枚举元素,标志对话框模板的ID
使用初始化成员列表对对象进行初始化,有时是必须的,有时是出于提高效率的考虑