1、 /成员变量 public : /类的访问控制 voidSet_Rdius(ouble r ) raus= r ;/成员函数 double Ge_ais() etur radis ; /通过成员函数设置成员变量 doube Get_it() return 2* .14f rdu ; 通过成员函数获取成员变量 uleet_Ara() eurn3.4f rdus * radus ; ;void ai()irleA, B ; /用类定义对象 A.SetRadus( 6.23 ); /类的调用 cou A.Radiu = A.GeRdius() d ; cot AGirth = Gt_Grth() n
2、dl ; coutAAra = A.Get_Area() ndl ; .Set_Radius( 1.5 ) ; cout Braiu B.Ge_adus() endl ; out B.Girth= B.Gt_Gith() end ; cout Are .Get_Area() end ;总结:建立类、对象、成员变量、成员函数,输入输入流基本概念。1.2初学者易犯错误模型/ dmo2_cicleerr.#inludisreausing namespac std;/c+的命名空间clascircubic: double r; doule pi = .41926; ouble rea r*;;nt m
3、ain() cicle pi; cot 请输入area pi.r; cut pia 和格式不一样,前者没有后缀,实际上,在你的编译器inl文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后缀为.h的头文件c标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c标准为了和区别开,也为了正确使用命名空间,规定头文件不使用后缀.。 因此,1)当使用iostamh时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c+实现;)当使用的时候,该头文件没有定义全局命名空间,必须使用nameaces;这样才能正确使用cou。二:
4、由于amspace的概念,使用C+标准程序库的任何标识符时,可以有三种选择:1、直接指定标识符。例如std::stream而不是ostram。完整语句如下: std:cut s:h 3.4 std:ed;2、使用uing关键字。 usngsd:cu; sing std:dl;instd:in; 以上程序可以写成 ct td:ex 3.3、最方便的就是使用sing amespc t; 例如: sing namespcestd;这样命名空间td内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写:hex 3.4 endl;因为标准库非常的庞大,所以程序员在选择的
5、类的名称或函数名 时就很有可能和标准库中的某个名字相同。所以为了避免这种情况所造成的名字冲突,就把标准库中的一切都被放在名字空间sd中。但这又会带来了一个新问 题。无数原有的C+代码都依赖于使用了多年的伪标准库中的功能,他们都是在全局空间下的。所以就有了iotream.h 和steam等等这样的头文件,一个是为了兼容以前的C+代码,一个是为了支持新的标准。命名空间st封装的是标准程序库的名称,标准程序库为了和以前的头文件区别,一般不加.h2 C+命名空间定义及使用语法/*在+中,名称(nme)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员
6、使用各种各样的+库时,这些标识符的命名发生冲突, 标准C+引入了关键字naspac(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。*/std是c+标准命名空间,c+标准程序库中的所有标识符都被定义在std中,比如标准库中的类iostem、vet等都定义在该命名空间中,使用时要加上using声明(usi nameace st) 或usig指示(如st:strin、sd:vctor)/中的命名空间在语言中只有一个全局作用域语言中所有的全局标识符共享同一个作用域标识符之间可能发生冲突 C+中提出了命名空间的概念 命名空间将全局作用域分成不同的部分不同命名空间中的标识符可以同名而
7、不会发生冲突命名空间可以相互嵌套全局作用域也叫默认命名空间C+命名空间的定义: namsace name +命名空间的使用:使用整个命名空间:usingnamesac name;使用命名空间中的变量:usig nme:vaiale;使用默认命名空间中的变量:ariable默认情况下可以直接使用默 认命名空间中的所有标识符3 C+命名空间编程实践amesac ameSaceA int a0;espaceNmepae = 1;nameace NmaceC stuct Tecer char me1; intage; ;it min()uing namee NaeSaceA; usin NameSpc
8、eB:NameSpace:Tahr; rintf(a %dn, a); prtf(a = %dn, NameSace:);NameaceB:NapC:Tachert2 eacher t aa, 3;rinf(t.name = sn, 1.name); pritf(t1.age = %d, t1);sytem(pauereurn 0;4结论1)当使用istram的时候,该头文件没有定义全局命名空间,必须使用amespae d;这样才能正确使用cout。若不引入using naesac sd,需要这样做。sd:cout。2)c标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。3
9、)C+命名空间的定义:nmesace name 4)uing namesp NameSpeA;5)namespce定义可嵌套。4.2“实用性”增加#incudeioseaus amses;/C语言中的变量都必须在作用域开始的位置定义!/+中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。intmain1() ini = 0; rint(dd int k;t(pause); retu;4. regie关键字增强 /regier关键字 请求编译器让变量a直接放在寄存器里面,速度快/在c语言中 rgiter修饰的变量不能取地址,但是在+里面做了内容/regsr关键字的变化rgste关键字
10、请求“编译器”将局部变量存储于寄存器中C语言中无法取得rgste变量地址在+中依然支持regster关键字C+编译器有自己的优化方式,不使用regier也可能做优化中可以取得reiser变量的地址/C+编译器发现程序中需要取regter变量的地址时,register对变量的声明变得无效。/3早期C语言编译器不会对代码进行优化,因此ie变量是一个很好的补充。ntmain2()giste int a = 0; printf(&a= xn, &a); yste(paue rturn 0;其他补充:请阅读eister关键字常识课外阅读.dox4.4变量检测增强在C语言中,重复定义多个同名的全局变量是合
11、法的 在C+中,不允许定义多个同名的全局变量C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上int g_var;in g_vr = 1;C+直接拒绝这种二义性的做法。*int m(iac, cha *arv) pri(g_va =%d, _a); eturn 0;4.5sruct类型加强 struc类型的加强:C语言的ruc定义了一组变量的集合,编译器并不认为这是一种新的类型C+中的uct是一个新类型的定义声明struc Stt ar name10; nt age;intmin(it argc, ch *a) udns1= wag,1; Stuent s wan,2; re
12、turn ;4.6 C+中所有的变量和函数都必须有类型/C+中所有的变量和函数都必须有类型 C语言中的默认类型在+中是不合法的函数f的返回值是什么类型,参数又是什么类型?函数可以接受多少个参数?/更换成.cpp试试f(i) pritf(i =%dn,i);g()trn 5;int mai(int arc,car *argv)f(0); print(g()=%dn, g(, 2, 3,, );getchar();reur ;在C语言中itf( );表示返回值为int,接受任意参数的函数int f(void);表示返回值为int的无参函数 在C中int ( );和int f(void)具有相同的意
13、义,都表示返回值为int的无参函数C+更加强调类型,任意的程序元素都必须显示指明类型4.4.6属于语法级别的增强。7新增Bool类型关键字C+中的布尔类型 C+在C语言的基本类型系统之上增加了bol C+中的bool可取的值只有tru和fase理论上ool只占用一个字节,如果多个bool变量定义在一起,可能会各占一个,这取决于编译器的实现rue代表真值,编译器内部用1来表示 als代表非真值,编译器内部用0来表示oo类型只有re(非)和fae()两个值+编译器会在赋值时将非0值转换为u,0值转换为falsen in(in argc, h *ag) int a;bol= true;prif( =
14、 %, izof() = %dn, b, zeof(b); b 4;a = b;prnf(a = ,b %dn, , b); -4;a ;printf(a = %,b =%, ,b); a = 0; b a;prin(a =%d,b = %dn, a,b); = 0;pntf(b= %,);ystem(pause); eturn 0;4.8三目运算符功能增强1三目运算符在C和+编译器的表现ntmain() nta = 0;itb = 20;/返回一个最小数 并且给最小数赋值成3 /三目运算符是一个表达式 ,表达式不可能做左值 (a b ? a: b )=3;pritf( = %d, b= %d
15、n, , b); sytm( return 0;结论 )C语言返回变量的值 C语言是返回变量本身语言中的三目运算符返回的是变量值,不能作为左值使用+中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方2)注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用(a 当左值的条件:要有内存空间;C+编译器帮助程序员取了一个地址而已思考:如何让中的三目运算法当左值呢?5C/C中的cnst 1 ct基础知识(用法、含义、好处)t ai()cnst a;intconstb;nst int *c;nt* con d;s it * const e ;rurn 0;Int uc1(co
16、st )初级理解:ost是定义常量=cot意味着只读含义:/第一个第二个意思一样 代表一个常整形数/第三个 是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改)第四个 d 常指针(指针变量不能被修改,但是它所指向内存空间可以被修改)/第五个e一个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改)Cnst好处/合理的利用onst,/1指针做函数参数,可以有效的提高代码可读性,减少bg;/2清楚的分清参数的输入和输出特性ineeacher_rr( costeacerp)onst修改形参的时候,在利用形参不能修改指针所向的内存空间2C中“冒牌货”inmain() onst = 10; int*p = (int*)&;pint(=%dn, ); p 11; pnt(=dnpintf(Hll.rurn ;解释:C+
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1