C++操作符 :
操作符(operator)用于操作数据。操作符进行计算、检查等式、进行赋值、操作变量和进行其它更奇怪的工作。C++中有许多操作符,这里不想列出全部,只列出最常用的操作符,如下表所示。表1.2常用C++操作符操作符说明举例
算术运算符
+ 加 x=y+z;
- 减 x=y-z;
* 乘 x=y*z;
/ 除 x=y/z;
赋值运算符
= 赋值 x=10;
+= 赋值与和 x+=10;(等于x=x+10;)
-= 赋值与减 x-=10;
*= 赋值与乘 x*=10;
/= 赋值与除 x/=10;
&= 赋值位与 x&=0x02;
|= 赋值位或 x|=0x02;
逻辑操作符
&& 逻辑与 if(x && 0xFF) {...}
|| 逻辑或 if(x || 0xFF) {...}
等式操作符
== 等于 if(x == 10) {...}
!= 不等于 if(x != 10) {...}
< 小于 if(x < 10) {...}
> 大于 if(x > 10) {...}
<= 小于或等于 if(x <= 10) {...}
>= 大于或等于 if(x >= 10) {...}
一元操作符
* 间接操作符 int x=*y;
& 地址操作符 int* x=&y;
~ 位非 x &=~0x02;
! 逻辑非 if(!valid) {...}
++ 递增操作符 x++(等于x=x+1;)
-- 递减操作符 x--;
类和结构操作符
:: 范围解析 MyClass :: SomeFunction();
-> 间接成员 MyClass-> SomeFunction();
· 直接成员 MyClass . SomeFunction();
优先级由高到低:非(!),算数运算符,关系运算符,&&和||,赋值运算符。
const原则:
使用const来修饰它前面的那个类型。Int *const b,指的是一个恒定的指针b,这个指针指向一个整型,所以这个指针的内容可以改变,但是它的指针值也就是b的值不能变,相应的int const *b,指的是一个指向恒定整型内容的指针b,也就是说这个b的内容可以变,但是开始的b所指向的地址中的内容不能在程序当中通过b来改变。
函数规则 :
1. 函数可以取任意多个参数或不取参数。
2. 函数可以返回一个值,但函数不强求返回一个值。
3. 如果函数返回void类型,则不能返回数值。
4. 如果要让返回void类型的函数返回数值,则会发生编译错误。返回void类型的函数不需包含return语句,但也可以包含这个语句。如果没有return语句,则函数到达末尾的结束大括号时自动返回。
5. 如果函数原型表示函数返回数值,则函数体中应包含返回数值的return语句,如果函数不返回数值,则会发生编译错误。
6. 函数可以取任意多个参数,但只能返回一个数值。
7. 变量可以按数值、指针或引用传递给函数
数组规则 :
1· 数组是以0为基数。数组中的第一个元素为0,第二个元素为1,第三个元素为2,等等。
2. 数组长度应为编译常量。编译器在编译时必须知道为数组分配多少内存空间。不能用变量指定数组长度。所以下列代码不合法,会导致编译错误:
int x = 10;int myArray[x]; // compiler error here·
小心不要重载数组末尾。
3. 大数组从堆叠(heap)而不是堆栈(stack)中分配(详见稍后)。· 从堆叠分配的数组可以用变量指定数组长度。例如:int x = 10;int* myArray = new int[x]; // this is OK
C++一个强大的特性是能直接访问内存,注意不要重载数组末尾。下列代码是合法的,但会导致程序或Windows崩溃:int array[5];array[5]=10;这是常见的错误,因为数组是以0为基数的,最大脚标应是4而不是5。如果重载数组末尾,则无法知道哪个内存被改写了,使结果难以预料,甚至会导致程序或Windows崩溃。C++不支持字串变量(放置文本的变量),C++程序中的字串是用char数据类型的数组表示的。
头文件的作用:
1. 通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。
2. 头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。
空行规则:
空行起着分隔程序段落的作用。空行得体(不过多也不过少)将使程序的布局更加清晰。空行不会浪费内存,虽然打印含有空行的程序是会多消耗一些纸张,但是值得。所以不要舍不得用空行。
l. 在每个类声明之后、每个函数定义结束之后都要加空行。
2. 在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。
代码行规则 :
l. 一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释。
2. if 、 for 、 while 、 do 等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加 {} 。这样可以防止书写失误。
代码行内的空格规则 :
l. 关键字之后要留空格。象 const 、 virtual 、 inline 、 case 等关键字之后至少要留一个空格,否则无法辨析关键字。象 if 、 for 、 while 等关键字之后应留一个空格再跟左括号‘(',以突出关键字。
2. 函数名之后不要留空格,紧跟左括号‘(',以与关键字区别。
3. ‘('向后紧跟,‘)'、‘,'、‘ ; '向前紧跟,紧跟处不留空格。
4. ‘,'之后要留空格,如 Function(x, y, z) 。如果‘ ; '不是一行的结束符号,其后要留空格,如 for (initialization; condition; update) 。
5 . 赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“ = ”、“ += ” “ >= ”、“ <= ”、“ + ”、“ * ”、“ % ”、“ && ”、“ || ”、“ << ” , “ ^ ”等二元操作符的前后应当加空格。
6. 一元操作符如“ ! ”、“ ~ ”、“ ++ ”、“ -- ”、“ & ”(地址运算符)等前后不加空格。
7. 象“ []”、“ .”、“->” 这类操作符前后不加空格。
8 . 对于表达式比较长的 for 语句和 if 语句,为了紧凑起见可以适当地去掉一些空格,
对齐规则 :
l . 程序的分界符‘ { '和‘ } '应独占一行并且位于同一列,同时与引用它们的语句左对齐。
2 . { } 之内的代码块在‘ { '右边数格处左对齐。
长行拆分规则 :
l . 代码行最大长度宜控制在 70 至 80 个字符以内。代码行不要过长,否则眼睛看不过来,也不便于打印。
2 . 长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。
C的9种控制语句:
1. if()~else~ (条件语句)
2. for()~ (循环语句)
3. while()~ (循环语句)
4. do~while()~ (循环语句)
5. continue (结束本次循环语句)
6. break (中止执行switch或循环语句)
7. switch (多分枝选择语句)
8. goto (转向语句)
9. return (从函数返回语句)
希望某些常量只在类中有效,由于#define定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用const修饰数据成员来实现。const数据成员的确是存在的,但其含义却不是我们所期望的。const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。const数据成员的初始化只能在类构造函数的初始化表中进行,这时,应当用类中的枚举常量建立在整个类中都恒定的常量,枚举常量不会占用对象的存储空间,它们在编译时被全部求值。枚举常量的缺点是:它的隐含数据类型是整数,其最大值有限,且不能表示浮点数(如PI=3.14159)。