符号::和:的作用和区别
::是作用域运算符,A::B表示作用域A中的名称B,A可以是名字空间、类、结构;类作用域操作符 “
::”指明了成员函数所属的类。如:M::f(s)就表示f(s)是类M的成员函数。作用域,如果想在类的外部引用静态成员函数,或在类的外部定义成员函数都要用到。使用命名空间里的类型或函数也要用到(如:
std::cout, std::cin, std::string等等)
- 表示“域操作符”
例:声明了一个类A,类A里声明了一个成员函数
void f(),但没有在类的声明里给出f的定义,那么在类外定义f时, 就要写成void A::f(),表示这个f()函数是类A的成员函数。 - 表示引用成员函数及变量,作用域成员运算符
例:
System::Math::Sqrt()相当于System.Math.Sqrt()
- 表示“域操作符”
例:声明了一个类A,类A里声明了一个成员函数
1 | |
- 在构造函数后面,冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。
1 | |
关于“:”冒号的用法的说明:
初始化列表的作用相当于在构造函数内进行相应成员变量的赋值,但两者是有差别的。 在初始化列表中是对变量进行初始化,而在构造函数内是进行赋值操作。两都的差别在对于像const类型数据的操作上表现得尤为明显:const 类型的变量必须在定义时进行初始化,而不能对const型的变量进行赋值,因此const类型的成员变量只能(而且必须)在初始化列表中进行初始化,如:
1 | |
这样的执行结果a,b各是多少呢?b=1,a=1?不是,b=1而a是个随机数。这一点是相当重要,一般在初始化列表中进行初始化时,初始化的顺序应与声明的顺序保持一致,防止出现不必要的错误。
public:和private:后面的冒号,表示后面定义的所有成员都是公有或私有的,直到下一个”public:”或”private:”出现为止。“private:”为默认处理。类名冒号后面的是用来定义类的继承。
1 | |
- 条件语句(? :)
与?构成条件语句,作用相当于
if else,如下;
1 | |
- 语句标签 通常跟
goto配合使用,如:
1 | |
这种作法也不是很推荐,原因在于它破坏了语句的顺序执行;
- switch语句中
case后。
符号.和->的作用和区别
A.B则A为对象或者结构体; 点号(.):左边必须为实体。A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针; 箭头(->):左边必须为指针;
1 | |