c++进阶知识小结(适用对c或c++有一定了解的人)_第1页
c++进阶知识小结(适用对c或c++有一定了解的人)_第2页
c++进阶知识小结(适用对c或c++有一定了解的人)_第3页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、换行符C+中 cout”hallo word!n” 中n 同样可以起到换行的作用关键字C+中预定义了 63 个关键字,参见表 2-2。另外,还定义了 11 个运算符关键字,它们是:and、and_eq、bitand、bitor、compl、not、not_eq、or、or_eq、xor ?、xor_eq另外,有些标识符虽然不是关键字,但C+语言总是以固定的形式用于专门的地方,也不能把它们当作一般标识符使用,以免造成混乱。这样的标识符有include、define 等asmdefaultfloatoperatorstatic_castunion auto deleteforprivatestru

2、ctbooldofriendprotectedswitchusing breakdoublegotopublic templatevirtualcasedynamic _castifregisterthisvoidcatchelseinlinereinterpret_castthrowcharenumint returntruewchar_tclass explicit longshorttrywhile constexportmutable signedtypedef const_ castexternnamespacesizeoftypeid. Continue falsenewstati

3、ctypename. .unsigned signedunsigned signed char signed unsigned 修饰词时,后面的类型说明符可以省略。例如:signed int n; /与int n;等价signed char ch; /与char ch;等价unsigned int n; /与unsigned n;等价unsigned char ch; /与unsigned ch;等价short 只用于修饰 int,且用 short 修饰时,int 可以省略,即: short int n; /与short n;等价long int doublelong int 时,int 可以

4、省略,即: long int n; 与long 等价int unsigned int 类型占用一个机器一个字16 位操作系统上,它2 32 4 个字节。变量类型在计算时的自动转换两个 float 型数参加运算,虽然它们类型相同,但仍要先转换成double 型再进行运算,结果亦为 double 型;char 型与 short 型会先转换成 int 型再进行运算转义字符n / 换 行r / 回 车t / v / b / 退 格f / 进纸 / 单引号 () / 双引号 () / 反斜杠 ()定义符号常量const 类型 名字 = 值; 例 2-7:const double PI = 3.14159

5、27; /圆周率 const long number = 49L;const char TAB = t; const char QUERY = ?;const double SOMENUM = 1.235E75;字符串的输入scanf我们输入字符串hello there,但读到空格时,scanf()就停止了,仅hello存入了字符串。Gets如果需要读取带空格的字符串,可以使用函数 gets gets n或0时才返回。条件运算符条件运算符是 C+中唯一的三目运算符,也称为三元运算符,它有三个操作数: 操作数 1(表达式) ? 操作数 2 : 操作数 3逗号运算符逗号运算符带两个操作数,返回值是

6、右操作数。逗号表达式的一般形式是:表达式 1,表达式 2,表达式 n,它的值是取表达式 n的值。例 1:int m, n, min;int mCount = 0, nCount = 0;min = (m . new delete(a+b)*(a-b)(CWnd *wnd)- FromHandle (CWnd wnd). FromHandle new CWnddelete (CWnd *wnd)位运算符、逻辑位运算符按位求反)1 00 。&(按位与(按位或,(按位异或)其中优先级&高于,而高于|。& :两个都为 1 时结果为 1。| :两个其中有一个为 1 则结果为 1。 :两个不同则结果为 1

7、,否则为 0。、移位运算符左移、(右移例. 指出下面表达式的功能。(p&0377)|(k&0 xff)8答:将整数p 的低字节作为作为结果的低字节,k 的低字节作为结果的高字节拼成一个新的整数。实例10 进制值二进制值x01100001001y02700010111x36611110110 x & y00100000001x | y03700011111x y03600011110 x 200200000010扩展:+= 加赋值-= 减赋值*= 乘赋值/= 除赋值%= 求余赋值&= 按位与赋值| = 按位或赋值= 按位异或赋值= 右移位赋值需要注意的是: x *= y+8 等价于 x=x*(y

8、+8),不等价于 x = x*y+8。同样:z &= y-x 等价于z = z & (y-x),而不等价于 z = z &y -x。短路表达式Int a=3;!a|a+|b+;a+0,b+a 4,b 0。带有缺省参数的函数的定义及使用规则void ShowMessage(char*Text, int Length = -1, int Color = 0);调用 ShowMessage 函数时,可以指定一个、二个或三个参数: ShowMessage(Helloo);ShowMessage(Helloo, 5);ShowMessage(Helloo, 5,8);8 5.例如,下面的调用是错误的:S

9、howMessage(Helloo, , 8);函数的地址传递及值传递地址传递可以改变实参的值。inline 内联函数double Average(double total, int number)return total/number;inline double Average(double total, int number)return total/number;上面的内联函数同它的非内联函数相比,仅仅是多了一个关键字 inline,它们在功能上double int double 型,且使用内联函数时应注意以下几个问题:在共享。简洁if switch ,否则,函数定义时即使inline

10、关键字,编译器也会把该函数作为非内联函数处理。即:#include int increment(int i); inline increment(int i)i+;return i;无法提高效率。void main()int i=0; while(i3)i=increment(i); couti is iendl;全局变量及其调用在开头定义的全局变量全局变量默认定义为 0在函数外部定义的变量才是全局变量,调用全局变量的符号为在 main 函数开始时定义的变量不是全局变量全局变量在未重名的情况下可以直接调用。在中间或是后边定义的全局变量量定义点之前的函数要引用该全局变量或另一个源文件中的函数要引

11、用该全局变量函数内对要引用的全局变量加说明。#include int max(int x, int main()extern int a, b; /全局变量说明,而非定义printf(%dn, max(a, b);return 0;int a = 13, b = -8; int max(int x, int y)int z;z = x y ? x : y; return z;extern extern int size = 10; / !在主函数内部定义b 是不对的,下图为正确的定义方法。17 静态变量如果在变量的定义前加上 static 关键字,就定义了静态变量。static static

12、关键字,就称为静态全局函数。静态局部变量的特性也是很有用的我们就可以把该局部变量定义为静态的。#include void func()static int i = 0;cout i = +i endl;void main()for(int x = 0; x 10; x+) func();本程序的运行结果为:i =1 i =6i =2 i =7i=3 i =8i=4 i =9i=5 i =10类似于全局变量,静态局部变量自动初始化为0。函数的重载C+中,当有一组函数完成相似功能时,函数名允许重复使用,编译器根据参数表中参数的个数或类型(不能根据形参变量名)来判断调用哪一个函数,这就是函数的重载。

13、例 5-26#include void show(int val)printf(Integer: %dn, val);void show(double val)printf(Double: %lfn, val);void show(char *val)printf(String: %sn, val);int main()show(12);show(3.1415); show(Hello Worldn!); return (0);定义重载的函数时, 我们应该注意以下几个问题:避免函数名字相同,但功能完全不同的情形。例如上面的重载函数show 是相关的,它们均是向屏幕打印信息。函数的形参变量名不同

14、不能作为函数重载的依据。C+否则,程序编译时会出现函数重复定义的错误。如果转换后仍然不能匹配到重载的函数,则会产生一个编译错误。字符数组两种字符串的初始化.s1 9 两种方法定义都对:Char a=”字符串”;char a=”字符串”;0.会使字符串输入终止.假定我们已经定义: char s110, s210; 执 行 语 句 : scanf(%s, s1);输入字符串Learn C+,数组 s1 中的元素如下图:即将空格前的字符送入数组 s1 中,忽略了空格后的字符。如果执行语句:scanf(%s%s, s1, s2);输入字符串Learn C+,数组 s1 和 s2 中的元素如下图:指针(

15、含引用)(1)*(pointer_1)+相当于 a+*(pointer-1+), 这时先按pointer_1 a pointer_1 pointer_1 便不再指向a 了。常量指针我们也可以用定义常量指针指向常量,以下两种形式都是合法的:int d =1;const int* const x = &d; / (1) int const* const x2 = &d; / (2)现在,指针和变量都不能改变。注意:定义指针常量时必须初始化。下面的常量指针定义是错误的:const int* const x;函数指针. 函数有两个整型参数,返回类型为指向 float 变量的指针。Compare = &

16、strcmp; / Compare 指向 strcmp 函数&运算符可以省略:Compare = strcmp; / Compare 指向 strcmp 函数函数指针也能在定义时初始化:int (*Compare)(const char*, const char*) = strcmp;当把函数地址赋给函数指针时必须匹配。上面的定义是有效的,因为函数 strcmp的原型与 Compare 匹配:int strcmp(const char*, const char*);给定了上面的定义后,strcmp 能被直接调用,也能通过 Compare 被间接调用,下面的三个调用是等价的:strcmp(Tom

17、, Tim); / 直接调用(*Compare)(Tom, Tim); / 间接调用Compare(Tom, Tim); / 间接调用float (* funptr)(int x,int y);这里定义了一个指向函数的指针变量 funptr,所指函数带两个整型参数,返回类型为float。下面定义函数指针方法是不对的:float * funptr(int x,int y); 函数有两个整型参数,返回类型为指向 float 变量的指针。引用.引用是一个变量的别名,除用&取代*外,定义引用的方法与定义指针类似。例如:double num1 = 3.14;double &num2 = num1; /

18、num1 未加&num2 num1 num1 的别名。也就是说, 它们是相同的变量。例如,如果执行下面的语句:num1 = 0.16;则 num1 和 num2 的值均为 0.16。化。例如,下面的定义是错误的:double &num3; / 非法:引用没有初始化num3 = num1;注意事项:当以引用方式传递函数参数时,我们常使用const 关键字。例如: void f1(const int i) i+; / 非法,编译错误这可以避免在函数中修改了不该修改的参数,有助于提高程序的可靠性。使用引用的规则:初始化后,程序不能改变引用的值。不能创建指向引用的指针。不能比较两个引用的值,可比较被引

19、用变量的值。不能使引用的值加,减和改变,但对被引用变量的值可以。void 进行引用。不能建立引用数组。没有引用的引用。有空指针,无空引用。typedeftypedef int INTEGERINTEGER int 作整型变量的类型说明了,例如: INTEGER a,b;它等效于:int a,b;typedef 定义的一般形式为: typedef 原类型名 新类型名例如:typedef int * intptr;intptr intptr p;等价于:int * p;需要注意的是:typedef 定义的类型只是 C+已有类型的别名,而不是新类型。有时也可用宏定义来代替 typedef 的功能,但

20、是宏定义是由预处理完成的,而 typedef 则是在编译时完成的,后者更为灵活方便。结构和链表(1)结构的定义(注意最后的分号)struct Child double height; double weight; int years;int months; char gender;Child double、两个t 和一个r 域(或成员,它可以与+的基本数据类型一样地使用(注意)结构类型定义也是一个语句,所以结尾必须有分号;,否则,会产生编译错误。指向结构的指针包含 new&delete 的使用#include #include struct Person_Info char name10; i

21、nt age;long ssn;void main (void)Person_Info* p1;p1 = new Person_Info; / 申请内存p1-age = 32; / 给 age 成员赋值strcpy(p1-name,Bobbie); / name 成员赋值/ 打印 p1 指向的内容cout Name: name endl; / 打印 name 成员cout Age: age endl; / 打印 age 成员delete p1; / 释放申请的内存该程序的运行结果为: Name:Bobbie Age:32宏定义(1)Const define 的区别#define 命令定义的符号不具有类型,它仅仅是被另一个字符串替换罢了,而const 产生的符号常量是具有类型的。例如:const int SIZE=80;说明 SIZE 是一个 int 型的常

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论