面向对象程序第二课c基础_第1页
面向对象程序第二课c基础_第2页
面向对象程序第二课c基础_第3页
面向对象程序第二课c基础_第4页
面向对象程序第二课c基础_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

1、 C+基础入门变量与类型的附加知识标识符的作用域Const限定符引用typedefn 作用域问题n 大多数作用域问题都很简单,就是用大括号。n 全局作用域(global scope)n 局部作用域(local scope)作用域嵌套#include #include std:string s1 = “hello”;/s1 has global scopeint main()std:string s2 = “world”; /s2 has local scope/uses global s1; prints “hello world”std:cout s1 “ “ s2 std:endl;int

2、 s1 = 42; / s1 is local and hides global s1/uses local s1; prints “42 world”std:cout s1 “ “ s2 std:endl;return 0;#include int avar = 10;void main() int avar; avar = 20; :avar:avar = 30;/ 作用域运算符 cout “ avar is “ avar endl; cout “ avar is “ :avar:avar b)b) t=a; t=a; else t=b; else t=b; return t; retur

3、n t; 给出以下程序的运行结果#include iostream.hint func(int n)if(n0) return 1;else if(n=0) return 0;else return -1; void main() int n; coutPlease input n:“ n;coutthe result:“ func(n) endl; n请注意:C+中不允许函数定义嵌套,即在函数定义中再定义一个函数是非法的。一个函数只能定义在别的函数的外部,函数定义之间都是平行的,互相独立的。例如:下面的代码在主函数中非法非法嵌套了一个f()函数定义:void main()void main(

4、) void f()void f() / 函数的声明函数的声明函数声明也称函数模型(或函数原型)。在主调函数中,如果要调用另一个函数,则须在本函数或本文件中的开头将要被调用的函数事先作一声明。声明函数,就是告诉编译器函数的返回类型、名称和形参表构成,以便编译系统对函数的调用进行检查。 函数声明的一般格式为: 函数类型函数类型 函数名(形式参数表);函数名(形式参数表);例如:设有一函数的定义为:double func1(double a, int b, float c) 函数体正确完整的函数声明应为:double func1(double x, intdouble func1(double x

5、, int y, float z); y, float z); /末尾要加上分号函数调用:函数调用:在C+中,除了主函数main由系统自动调用外,其他函数都是由主函数直接或间接调用的。函数调用的语法格式为:函数名 (实际参数表);常见的函数调用有下列两种:n方式一:方式一:将函数调用作为一条表达式语句使用,而不使用其返回值。若函数调用带有返回值,则这个值将会自动丢失。若函数调用带有返回值,则这个值将会自动丢失。例如:max(3,5);max(3,5);n方式二方式二:对于具有返回值的函数来说,把函数调用语句看作语句一部分,使用函数的返回值参与相应的运算或执行相应的操作。例如:intint a=

6、max(3,5); a=max(3,5); intint a=max(3,5)+1; a=max(3,5)+1;coutmax(3,5)endlcoutmax(3,5)endl; ;if(f1(a,b) if(f1(a,b) cout”true”endl cout”true”endl; ;intint a=2; a=2;a=max(max(a,3),5);a=max(max(a,3),5);n当调用一个函数时,整个调用过程分为三步进行:第一步是参数传递;第二步是函数体执行;第三步是返回,即返回到函数调用表达式的位置。 参数传递n参数传递称为“实虚结合”,即实参向形参传递信息,使形参具有确切地含

7、义(即具有对应的存储空间和初值)。这种传递又分为两种不同的方式,一种是按值传递,另一种是地址传递或引用传递。按值传递#include iostream.hvoid swap(int,int);void main() int a=3,b=4; Couta=a,b=“ bendl; swap(a,b); couta=a,b=b endl; void swap(int x,int y) int t=x; x=y; y=t; n地址传递#include iostream.hvoid swap(int *,int *);void main() int a=3,b=4; couta=a,b=“ bendl

8、; swap(&a,&b); couta=a,b=“ bendl; 引用传递#includeusing namespace std;void Swap(int& a, int& b);int main()int x(5), y(10);coutx=x y=yendl;Swap(x,y);coutx=x y=yendl;return 0;void Swap(int& a, int& b)int t;t=a;a=b;b=t;运行结果运行结果:x=5 y=10 x=10 y=5t=a;x5t5x 的别名axy510y 的别名x 的别名aby 的别名x

9、的别名abx10y10a=bb=t;y5t5y 的地址bxy105Swap(x,y);26内联函数内联函数n声明时使用关键字 inline。n编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销。n注意:n内联函数体内不能有循环语句和switch语句。n内联函数的声明必须出现在内联函数第一次被调用之前。#includeusing namespace std;inline double CalArea(double radius) return 3.14*radius*radius;int main()double r(3.0);double area;area=CalArea(r);

10、coutareaendl;return 0;默认形参值的作用n函数在声明时可以预先给出默认的形参值,调用时如给出实参,则采用实参值,否则采用预先给出的默认形参值。n例如:int add(int x=5,int y=6) return x+y;void main(void) add(10,20); /10+20 add(10); /10+6 add(); /5+6n默认形参值必须从右向左顺序声明,并且在默认形参值的右面不能有非默认形参值的参数。因为调用时实参取代形参是从左向右的顺序。n例:int add(int x,int y=5,int z=6); /正确int add(int x=1,int

11、 y=5,int z); /错误int add(int x=1,int y,int z=6); /错误重载函数n函数名相同n参数列表不同n例:int circle ( int i );double circle ( double b);n类型的自动转换以匹配重载函数应用举例编写三个名为add的重载函数,分别实现两整数相加、两实数相加和两个复数相加的功能。#includeusing namespace std;struct complexdouble real;double imaginary;void main(void)int m, n;double x, y;complex c1, c2,

12、 c3;int add(int m, int n);double add(double x, double y);complex add(complex c1, complex c2);coutmn;coutinteger m+n=add(m,n)endl;coutxy;coutreal number x+y= add(x,y) endl;coutc1.realc1.imaginary;coutc2.realc2.imaginary;c3=add(c1,c2);coutcomplex number ( c1.real , c1.imaginary )+(c2.real, c2.imaginar

13、y)=(c3.real, c3.imaginary)n;int add(int m, int n) return m+n; double add(double x, double y) return x+y; complex add(complex c1, complex c2) complex c;c.real=c1.real+c2.real;c.imaginary=c1.imaginary+c2.imaginary;return c;运行结果:Enter two integer: 3 5integer 3+5=8Enter two real number: 2.3 5.8real numb

14、er 2.3+5.8= 8.1Enter the first complex number: 12.3 45.6Enter the second complex number: 56.7 67.8complex number (12.3,45.6)+(56.7,67.8)= (69,113.4)3、数组和指针数组的概念和声明指针运算和地址运算指针和动态分配的存储空间数组的概念和声明n数组是一段连续的内存单元n声明:char str10;n用下标来访问,从0到n-1。n作为一个地址,数组名可以赋值给一个合适类型的指针变量。如:char *s; s = str; s0 = z;指针运算和地址运算n

15、指针的基本概念声明:int *a, *b;/声明a、b为整形指针变量char *r, *s;/声明r、s为字符型指针变量Account *u;/声明指针u用来存放一个Account对象n操作符操作符& &和和* *&是取地址操作符*是取值操作符如:int *ap = &m3;给整形指针ap赋于整形数组m3的地址,这样ap就指向了m3。注意:&仅仅适用于存储在内存中的数据,不可用于常量,寄存器变量或者表达式。只能用指向相同类型的指针给另一个指针赋值,而在不同类型的指针之间进行赋值是错误的。比如:int a,b; int *p1=&a,*p2=p1;

16、 /正确而:int a;int *p1=&a;double *p2=p1; /错误 void指针和const指针在C+语言中,可以声明指向void类型的指针。指向void类型的指针称为void指针。此外,在声明指针时,还可以用关键字const进行修饰,用关键字const修饰的指针称为const指针。 void指针nC+语言允许使用空类型(void)指针,即不指定指针指向一个固定的类型,它的定义格式为: void void * *p;p;n表示指针变量p不指向一个确定的类型数据,它的作用仅仅是用来存放一个地址。nvoid指针它可以指向任何类型的C+数据。也就是说,可以用任何类型的指针直接

17、给void指针赋值。不过,如果需要将void指针的值赋给其他类型的指针,则需要进行强制类型转换。比如:int a; int *p1=&a; void *p2=p1;int *p4=(int *)p2; const指针关键字const放在不同的位置表示的意义也不相同: n关键字const放在指针类型前,就是声明一个指向常量的指针。此时,在程序中不能通过指针来改变它所指向的值,但是指针本身的值可以改变,即指针可以指向其他数据。 Const char* p =“hello”;n关键字const放在“*”号和指针名之间,就是声明一个指针常量(也称常指针)。因此,指针本身的值不可改变,也即它不能

18、再指向其他数据,但它所指向的数据的值可以改变。 Char* const p =“hello”n关键字const在上述两个地方都加,则是声明一个指向常量的指针常量,指针本身的值不可改变,它所指向的数据的值也不能通过指针改变。Const char*p const p =“hello”4、指针和动态分配的存储空间nnew运算符nDelete运算符n应用程序数据所占的内存可以分为3类:静态(常量)存储区、栈、堆。在程序运行开始前就分配的存储空间都在静态存储区中;局部变量分配的存储空间在栈中;动态内存分配的存储空间在堆中,堆也称为自由存储单元。new运算符与delete运算符一起使用,就可以直接进行动态

19、内存的申请和释放(也称为创建和删除)。 mallocn函数malloc 的原型如下:void * malloc(size_t size);n用malloc 申请一块长度为length 的整数类型的内存:int *p = (int *) malloc(sizeof(int) * length);两个要点是“类型转换”和“sizeof”。 freen函数free free 的原型如下:void free( void * memblock );例:free(p);nnew运算符用于申请所需的内存单元,返回指定类型的一个指针。它的语法格式为:指针指针=new =new 数据类型;数据类型;例如:int *p;p = new int;系统自动根据int类型的空间大小开辟一个内存单元,用来保存int型数据,并将地址保存在指针p中。例如:int *p;p = new int10;则系统为指针p分配了整型数组的内存,数组中有10个元

温馨提示

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

评论

0/150

提交评论