




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第 13 13 章章 C+C+基础基础北京邮电大学出版社北京邮电大学出版社内容提要C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页13.1 C+概述概述 (1) 保留字 (2) 数据描述 (3) C与C+亦有不同之处 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页 C+是从C语言的基础上发展而来的 C语言编写的程序可以在C+下使用 C语言源程序文件的扩展名为.C C+源程序文件的扩展名一般为.cpp
2、C与C+的不兼容性之处: C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页(1) 保留字保留字 保留字是一种语言中具有特定含义与用途的标识符,在程序中不能作为用户自定义标识符 表13.1 C+语言中是保留字 _asmdynamic_castoperatorstatic_casttypeid catchfriendprivatetemplateusing classinlineprotectedthisvirtual const_castnamespacepublicthrowxalloc delet
3、enewreinterpret_casttry C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页(2) 数据描述数据描述 在C+中,结构、联合和枚举类型名可直接作类型名定义变量 如:struct STUDENT char name20; /*学生姓名*/ char num10; /*学生学号*/ int score; /*成绩*/ ; C+中类型变量定义形式:STUDENT lisi; C语言中该类型变量定义形式:struct STUDENT lisi; C C语言程序设计语言程序设计C C语言程序
4、设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页 C+中若全局变量在定义变量的模块之外使用,即其它模块要使用它,则必须先使用extern说明符对该变量进行声明。 C语言中void类型的指针可以赋值给任何类型的指针,C+中不能。 定义: int a, *p_int;C语言中:void *p_void=&a; p_int=p_void; C+中: p_int=(int *)p_void; (使用强制类型转换)C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下
5、一页(3) C与与C+在函数上的不同:在函数上的不同: C+中函数必须先定义或声明函数原型才能调用。 C+中函数若有参数,则在函数声明中必须列出参数。 C+中在函数定义时,形式参数的类型应在参数表中声明。 int Sum(int a,int b) return (a+b); C语言中,未说明为void类型的函数可以不返回值;C+中,未说明为void类型的函数(构造函数除外)都必须有返回值。 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页13.2 C+对对C的扩充的扩充 C C语言程序设计语言程序设
6、计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页13.2.1 C+的输入输出的输入输出 在头文件iostream.h中, C+提供了标准流: 标准输入流cin, 缺省设备为键盘。 标准输出流cout, 缺省设备为显示器。 标准出错输出流cerr, 立即输出,缺省设备为显示器。 标准出错输出流cerr的缓冲形式clog, 缓冲区满输出,缺省设备为显示器。 标准流是不需要打开与关闭文件就可以使用的流标准流是不需要打开与关闭文件就可以使用的流式文件。式文件。C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设
7、计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页(1)用标准输出流)用标准输出流cout 进行输出进行输出 格式: cout输出项;“”叫插入运算符,将输出项插入到输出流中 例如:cout” This is a C+ Programn” ; 相当于语句: printf(” This is a C+ Programn”);C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页 cout允许使用多个插入运算符“”将多个输出项插入到输出流中。 插入运算符的结合方向是自左向右。 例如:int
8、a=15,b=32;cout”a=”an”b=”bn; 输出结果为:a=15 b=32 在iostream.h中,定义了一个与n相同的控制字符endl。cout”a=”aendl”b=”bendl ;C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页 cout通过控制符setw来设置。 格式为:setw(n)表明要为后续的一个输出项预留n列。如输出项长度不够n,则数据右对齐;如超过n列,则按实际长度输出。 例如:cout”a=”setw(4)a”b=”b endl ”a+b=”a+bendl ”x=”
9、setw(3)x从输入流中提取数据。 例如:int a;float x;cinax; /相当于scanf(“%d%f ”, &a,&x);连续输入多个变量值时,各值以空格或回车分隔。 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页例例13.1 流流cin与与cout的使用的使用#include void main() int score; char name20; cout Input your name and score: name; /输入姓名 cinscore; /输入成绩 cout “
10、Your name is ” name endl; cout “Your score is ” score endl; 运行情况如下:运行情况如下:Input your name and score:TanJing 98 Your name is TanJing Your score is 98C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页带参数带参数(定义在定义在iostream.h中中)与带参数的格式与带参数的格式控制操作符控制操作符(定义在定义在iomanip.h中中): dec以十进制形式
11、输入或输出整数; oct以八进制形式输入或输出整数; hex以十六进制形式输入或输出整数; ws用于输入时跳过开头的空白符; endl用于输出时换行; ends用于输出时插入空格字符; setbase(int n)基数转换成n(n的取值为0,8,10或16),可用于输入和输出; setw(int n)设置域宽为n,可用于输入和输出; setfill(int c)设置填充字符为c,可用于输出; setprecision(int n)设置精度为n位,可用于输入和输出,但用于输入时应多加一位。 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设
12、计语言程序设计上一页上一页下一页下一页13.2.2 C+的行注释的行注释 注释界限符:/*和*/ “/*/”注释方式不能嵌套 单行注释符: / 注释自“/”开始至行尾,适合于不超过一行的注释。 main( ) /*main( )函数 /*嵌套注释。*/ */ /* main( )函数 /嵌套注释。 */ 该注释方该注释方式不允许式不允许该注释方该注释方式允许式允许C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页13.2.3 const常量定义与使用常量定义与使用 C语言中,用define宏定义来定义
13、常量。但在编译预处理时将符号常量用其后的常量作简单的替换,易出现意想不到的问题。 例如:#define N 2#define M N+1#define NUM (M+1)*M/2通常将NUM的值看成6:NUM=(3+1)*3/2=6实际上编译预处理后其值:NUM=(2+1+1)*2+1/2=8 C+常量定义格式为:const 类型标识符 常量标识符=常量表达式;const解决了上述问题,它定义的常量可以用指针操作。 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页 const用于修饰指针时,有三种组
14、合:(1)指向常量的指针,定义格式为: const 类型标识符 *变量名=常量;例如: const char *str=”China”;或char const *str=”China”; str是一个指向常量的指针,称为常量指针,不能改变所指常量的值。例如: str0=S;重新赋值不允许 但指针str本身不是一个常量,而是一个变量,可以指向另一个常量。例如:str=”Changsha”; C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页(2)指针为常量,称为指针常量,定义格式为:类型标识符 * co
15、nst 指针变量名=常量;例如: char *const str=”China”; 不能写为:char const *str=”China”; str是一个常量,不能修改str的值。例:str=”Changsha”; 在C+中是非法的。 但str没有定义为指向常量,其所指的值可以改变。例如:str0=S;是合法的。 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页(3)指向常量的常指针,指针和它所指的对象都为常量 const 类型标识符 *const 变量名=常量;例如:const char *co
16、nst str=”China”;指针str不能指向”China”以外的字符串,也不能改变指针所指的对象 例如:下面的操作都是错误的。 str=”Changsha”; str2=A; C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页13.2.4 局部变量的定义与全局变量作用域运局部变量的定义与全局变量作用域运算符算符 (1) 局部变量的定义 C+语言把局部变量的定义看成是执行语句,只要在局部变量首次使用前已定义即可。这样,可将变量定义置于使用该变量的语句之前,便于阅读和修改。C C语言程序设计语言程序
17、设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页例例13.4 输入一个班学生的输入一个班学生的C语言成绩语言成绩(最多(最多40人),求班平均成绩人),求班平均成绩#include const int MaxN=40; / MaxN表示每班最多人数main( ) float sum=0; / sum存放学生的总成绩 for (int n=1;n=MaxN;n+) /使用前定义n float score; cout“n输入第“ n score; sum+=score; couty_or_n; if (y_or_n = =N|
18、y_or_n = =n) break; cout“n学生人数为:”nendl“平均成绩为:sum/nendl; C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页(2) 全局变量作用域运算符:例13.5 变量作用域示例。include int a=10;main() float a=3.14; printf(“a=%fn”,a); 输出结果为:3.140000 C语言规定:局部变量与全局变量同名时,在局部变量作用域内,全局变量被屏蔽。 #include int a=10;void main() flo
19、at a=3.14;cout”a=”:aendl; 输出结果为输出结果为a=10 qC+通过作用域运算符通过作用域运算符“:”来使用全局变量来使用全局变量aC C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页13.2.5 变量的引用变量的引用 (1)引用的概念 引用是以别名的方式来使用另一变量或常量,其作用是为变量取一个别名。 引用的声明格式:类型标识符 &引用名;其中&为引用声明符,不是取地址。 例如:int a;int &b=a; b是a的引用,亦即b是a的别名,对b的任何操作就是对a的操作。a和b
20、具有相同的存储单元,只是名称不同而已,b就是a本身。 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页 在使用引用时,应注意以下几个方面:创建一个引用时必须将其初始化成对某一具体变量或常量的引用;程序中不能改变引用对象,即不能改变成对另一变量或常量的引用;必须确保引用是和一个合法的存储单元相连;对常量的别名引用必须是const类型的引用。 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页(2)引用作为函数
21、参数引用作为函数参数 C语言中,函数的参数传递有两种: 一是值传递,把变量名作为实参。 二是指针传递。 C+扩展函数参数传递的第三种方式。即用引用型变量作为函数参数。C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页 值传递值传递 #include void Swap(int a, int b) inttemp;temp=a;a=b;b=temp; couta=a,b=bendl; void main()inti=5,j=10;couti=i,j=jendl;Swap(i,j);couti=i,j=j
22、endl; 程序执行结果为:i=5,j=10 a=10,b=5i=5,j=10C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页传递变量的指针传递变量的指针 #include void Swap(int *p1,int *p2) int temp; temp=*p1; *p1= *p2; *p2=temp; void main ( ) int a=5, b=10; cout“a=”a“,”“b=”bendl;/输出a,b交换前的值 Swap (&a, &b); /实参为地址,即变量的指针 cout“a
23、=”a“,”“b=”bendl;/输出a,b交换后的值 程序执行结果为:a=5,b=10 a=10,b=5C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页 采用引用作为函数参数采用引用作为函数参数 #include void Swap(int &a, int &b)/声明a,b是整型引用变量,没有初始化 int temp; temp=a; a=b; b=temp; couta=a,b=bendl;/输出a,b交换后的值 void main() int i=5,j=10; cout“i=”i“,”“j
24、=”jendl;/输出调用swap( )前i,j的值 Swap(i,j); couti=i,j=jendl;/输出调用swap( )后i,j的值 程序执行结果为:i=5,j=10 a=10,b=5i=10,j=5 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页(3)引用作为函数的返回值引用作为函数的返回值#include int &Square(int &x) /引用型函数 x=x*x; return x; /返回引用型变量值(实参的别名引用)void main( ) int t=3; coutS
25、quare(t)endl; /用t对引用型形参x初始化,x是t的别名 cout”t=”tendl; /调用后t的值 t=3; cout+Square(t)endl; cout”t=” tendl; /调用后t的值 程序执行结果为: 9 t= 9 10 t=10C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页13.2.6 函数重载函数重载 函数重载是指允许同一作用域用同一函数名来定义不同的函数。 重载函数的参数必须具备以下差别之一:(1) 函数参数个数不同。(2) 函数参数类型不完全相同。 函数的参数
26、表称为函数的特征 注意 :(1)仅返回类型不同的函数不能重载;(2)若函数参数除其中一个是另一个的类型的const或引用外均相同,则不能重载。 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页例如:求两数之和的函数int Sum(int n,int m); 正确的重载: float Sum(float n,float m);/ 参数类型不同,可以重载 int Sum(int n,int m,int p); / 参数个数不同,可以重载 错误的函数重载: float Sum(int n,int m);/
27、仅返回类型不同,不能重载。 int Sum(const int n,int m);/参数是同类型的const,不能重载。 int Sum(int &n,int m);/参数是同类型的引用,不能重载。 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页例例13.10 利用重载函数求不同类型、不同利用重载函数求不同类型、不同个数的数的最小值。个数的数的最小值。#include int Min(int x,int y) return xy?x:y;int Min(int x,int y,int z) int
28、 temp; if (xz) temp=z; return temp;float Min(float x,float y,float z) float temp; if (xz) temp=z;return temp;int main( ) coutendlMin(5,10)endl; coutMin(10,4,8)endl; float min,x=10.1,y=15.1,z=8.4; min=Min(x,y,z); coutminendl; return 0; 输出结果为:输出结果为: 5 48.4C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C
29、 C语言程序设计语言程序设计上一页上一页下一页下一页13.2.7 带缺省参数的函数带缺省参数的函数 例13.11 求三个整数的最大值#include int Fmax(int a, int b,int c=-32768) int temp; temp=ab?a:b; if (tempc) temp=c; return temp;void main() int m,n,q,max; coutmnq; max=Fmax(m,n,q); coutMax=maxendl; coutmn ; max=Fmax(m,n); coutMax=maxendl; 程序执行结果为:程序执行结果为: Input m
30、,n,q:8 5 10 Max=10 Input m,n,q:8 5 Max=8C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页使用缺省参数函数时应注意使用缺省参数函数时应注意: (1)一旦某参数定义了缺省值,其后续参数(即其右边的所有参数)均须定义缺省值; 例如:int Fmax(int a, int b=0,int c); 错误:b有缺省值,c也必须有缺省值。(2)调用含缺省参数的函数时,若某参数用缺省值,则其后的所有参数都应用缺省值;例如: Fmax(a, , c);错误:b使用缺省值,则c也
31、必须使用缺省值。(3)如在函数原型(即函数声明)中定义了缺省参数,就不能在函数原型有效范围里的函数定义中再设置缺省参数。若在函数定义时设置缺省参数,则不能在函数体外再说明缺省参数的函数原型。 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页例如:int Fmax(int a, int b,int c=-32768);/在原型中设置缺省值int Fmax(int a, int b,int c=-32768)/错误:前面函数原型已经设置缺省值 或者直接在函数定义时设缺省值:int Fmax(int a,
32、 int b,int c=-32768)/允许:前面没有说明函数原型,可以在定义函数时设置缺省值 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页 不要将不同功能的函数声明为重载函数,以免出现调不要将不同功能的函数声明为重载函数,以免出现调用结果的误解、混淆。这样不好用结果的误解、混淆。这样不好:int add(int x,int y);int add(int a,int b);编译器不以编译器不以形参名形参名来区分来区分int add(int x,int y);void add(int x,int
33、 y);编译器不以编译器不以返回值返回值来区分来区分int add(int x,int y) return x+y; float add(float x,float y) return x-y; C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页(4)不要同时使用重载函数与缺省参数的函数,因为在调用函数时,如果实参与形参个数不同,则系统无法判断是使用重载函数还是缺省参数的函数。这也是使用缺省参数函数带来的副作用。(5)缺省参数函数的使用提高了函数的易用性,但过度的使用会降低程序的可读性。 C C语言程
34、序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页13.2.8 内联函数内联函数 宏替换所产生问题的典型示例:#include #define Square(x) x*x /宏定义,求x的平方void main( ) int x; coutx; cout “x的平方为:”Square(x)endl; cout “x+2的平方为:”Square(x+2)endl; 程序执行的结果为:输入x::5x的平方为:25x+2的平方为:17执行结果有误,原因是Square(x+2)经宏替换后为:x+2*x+2。 C C语言程
35、序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页 内联函数定义方法:在进行函数定义或函数声明时,在函数首部最左边冠以“inline”关键字。#include inline int Square(int x)/内联函数,求x的平方 return x*x;void main( ) int x; coutx; coutx的平方为:Square(x)endl; coutx+2的平方为:Square(x+2)name=”WangWu”;/初始化存储单元PStudent-id=”0309301”;PStudent-scor
36、e=98; C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页例例13.13 new与与delete使用示例使用示例#include #include struct Book char name20; float price; ;void main() Book *b; b=new Book; strcpy(b- -name,”C+ Programming”); b- -price=45.8; coutnameendl; coutpriceendl; delete b; /释放由释放由new分配的分配
37、的b指向的指向的Book空间空间 /coutnameendl; 不能再使用不能再使用b 程序执行结果:程序执行结果:C+ Programming45.8 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页13.3 C+面向对象程序设计面向对象程序设计 类与对象 构造函数与析构函数 静态成员 友元 运算符重载 继承与派生 多态性与虚函数 IO流 文件输入输出流 模板 异常处理 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上
38、一页下一页下一页13.3.1 类与对象类与对象 面向对象程序设计方法就其实质而言是一种面向数据的程序设计方法,它谋求的是设计结果与问题在结构上保持一致。 对象:将数据(或称为属性、状态)及施加在数据上的功能(或称为操作、行为、方法)捆绑在一起。 类:由对象抽象而为类,通过继承形成类层次。 对象间通过发送消息而相互联系和相互作用,从而完成系统的有关功能。 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页面向对象的程序设计语言应具有的特征: 支持对象(Object)的有关概念; 将对象抽象为类(Clas
39、s); 类通过继承(Inheritance)形成类层次; 对象间通过传递消息(Message)而相互联系。C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页(1)对结构的扩充对结构的扩充 C结构中只含有数据成员; C+的结构中增加了与数据成员的处理有关的函数,称之为成员函数。 在C+中,结构体的成员通常分为两类: 私有成员(private) 公有成员(public)。在缺省的情况下,如例13.13,C+规定结构体的成员是公有的。 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程
40、序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页例例13.14 C+的结构体示例的结构体示例#include #include struct COMPLEX double real; double image; double AbsComplex( ) double temp; temp=real*real+image*image; return sqrt(temp); ;int main( ) COMPLEX cpl; cpl.real=6; cpl.image=8; cout“复数复数“cpl.real + cpl.image i“的绝对值为的绝对值为:”; cou
41、tcpl.AbsComplex( )endl; return 0; 程序执行结果为程序执行结果为:复数复数6+8i的绝对值为的绝对值为:10 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页(2) 类与对象类与对象 “类”:就是对一组具有相同属性(特征)和操作(行为)的事物。“类”由“对象”进行抽象而成一个“对象”就是一个“类”的具体实例 对象具有以下几个方面的特征: 对象的标志符或名字; 描述对象的属性; 与对象的属性有关的操作。C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语
42、言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页例如:例如:“刘伟刘伟”是一个是一个“学生学生”对象。对象。 对象名:刘伟 对象的属性:姓名:刘伟学号:00001年龄:22性别:男总分:712 对象的操作:修改 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页类声明形式:类声明形式: class 类名 private: 私有数据成员和成员函数 public: 公有数据成员和成员函数 protected: 保护数据成员和成员函数 对象名表; C C语言程序设计语言程序设计C
43、 C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页 说明:说明:类声明中的private、public和protected三个关键字的出现次序和次数可以是任意的。如果private在类声明一开始就出现,则可以省略。private、public和protected用来设置访问安全保护措施: private后声明的数据成员和成员函数只能被类的成员和友元函数访问; public后声明的数据成员和成员函数没有访问限制; protected同private基本相似,不同:子类可以使用protected之后声明的数据成员和成员函数,但不能使用p
44、rivate之后声明的数据成员和成员函数。数据成员的数据类型可以是任何数据类型,但不能用auto、register或extern修饰,且不能在类声明时赋初值。 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页例如例如 :class Cstudent private: /下面是该类的三个私有成员 char Name20; int Id; int Score; public: /公用成员 void display() /类的成员函数,是类的实现 coutNameendl; coutIdendl; cou
45、tScoreendl; ; /类定义结束,其后的分号不能少Cstudent st1,st2; /创建Cstudent类的两个对象st1、st2C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页类中的常见成员函数类中的常见成员函数:构造函数:用来对数据成员进行初始化,创建对象时调用,名字与类名相同,一个类可有多个构造函数,但参数个数或类型应不同。析构函数:用来释放分配给对象的空间,撤销对象时调用,名字是在构造函数名前加一个波浪号(),且函数没有参数,无返回值,一个类只有一个。 静态成员函数:成员函数之前
46、有“static”关键字,一般用于静态数据成员或全局变量的访问,同静态数据成员一样,为该类的所有对象共享。 内联成员函数:一般在类内部定义,调用该成员函数时,C+编译器将用函数体中的代码替代函数调用表达式。虚函数:成员函数前有“Virtual”关键字。const成员函数:const对象是一个常量,非const成员函数有可能修改数据成员,const成员函数是用来为const对象服务的。友元函数:声明时函数前加“friend”关键字。它可以是另一个类的成员函数,也可以是不属于任何类的普通函数。 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序
47、设计语言程序设计上一页上一页下一页下一页例例13.15 类的使用示例类的使用示例#include #include class Cstudent private: int Id; /学号 float Score; /成绩 public: char Name20; void SetScore(float Blscore) Score=Blscore; float DisScore( ) return Score; void SetId(int Idnum ); /置学号成员函数声明 int DisId( ); /声明显示学号函数声明显示学号函数 /声明显示类的各成员变量的成员函数声明显示类的各成
48、员变量的成员函数 void Display() coutNameendl; coutIdendl; coutScoreendl; ; /类定义结束,其后的分号不能少类定义结束,其后的分号不能少/在类的外部实现定义学号成员函数在类的外部实现定义学号成员函数int Cstudent:DisId( ) return Id; void Cstudent:SetId( int Idnum )Id=Idnum; C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页主函数中使用类:主函数中使用类:程序执行结果为:程序
49、执行结果为:姓名:刘伟姓名:刘伟学号:学号:3301成绩:成绩:98刘伟刘伟330198int main() Cstudent Liuwei; /创建一个Cstudent类对象Liuwei strcpy(Liuwei.Name,“刘伟”); /Name是类的公用数据成员,可以在类外使用。 Liuwei.SetId(3301); /学号与成绩是私有成员,只能由成员函数使用 /不能Liuwei.Id=3301; Liuwei.SetScore(98); cout 姓名: Liuwei.Name endl; cout 学号: Liuwei.DisId() endl; cout 成绩: Liuwei.
50、DisScore() endl; Liuwei.Display(); return 0; C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页外部定义成员函数的一般格式为:外部定义成员函数的一般格式为:函数类型 类名:函数名(形参说明表列) 函数体 例如:上例中的设置学号成员函数。void Cstudent:SetId( int Idnum )Id=Idnum; 注意:Cstudent:SetId(int Idnum)是一个整体,说明SetId( )是类Cstudent中的成员函数。 C C语言程序设计
51、语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页消息消息(Message):消息是“对象”与“对象”之间的联系接口,用于调用某个对象的成员函数(或称激活某个方法) 一个消息由三个部分组成: 消息的接受对象,即“类”的对象名 ; 消息名,即类中公有成员函数的函数名 ; 零个或多个参数,即公有成员函数的形式参数。 例如: 向“STUDENT”类的一个对象“Liuwei”发送一个消息,通知它执行“Display”方法,消息表示为:Liuwei.Display( ); “Liuwei”为消息接受的对象 “Display”为消
52、息名 消息不带参数,对象由相应的方法对消息进行响应。C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页13.3.2 构造函数与析构函数构造函数与析构函数 (1) 构造函数 构造函数是与类同名的特殊成员函数,声明类对象时,构造函数被自动调用,为对象分配内存空间,对该对象进行初始化 构造函数的声明格式为:class 类名public: 类名();/缺省构造函数原型 类名(参数表);/一般构造函数原型 类名(类名&对象名);/拷贝构造函数原型 ;C C语言程序设计语言程序设计C C语言程序设计语言程序设计C
53、 C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页 缺省构造函数缺省构造函数: :构造函数没有任何参构造函数没有任何参数数例13.16 缺省构造函数示例#include #include class Cstudent private: char Name20; int Id; int Score; public: Cstudent( ) /类的缺省构造函数 strcpy(Name,”刘伟”); Id=3301; Score=98; void Display() coutNameendl; coutIdendl; coutScoreendl; ;int main(
54、) Cstudent Liuwei; /系统自动调用构造函数系统自动调用构造函数Cstudent()对对象对对象 /Liuwei进行初始化进行初始化 /以下的初始化语句不需要了。以下的初始化语句不需要了。 /strcpy(Liuwei.Name,“刘伟刘伟”); / Liuwei.SetId(3301); / Liuwei.SetScore(98); cout 姓名:姓名:Liuwei.Nameendl; cout 学号:学号:Liuwei.DisId()endl; cout“成绩成绩:Liuwei.DisScore()endl; Liuwei.Display(); return 0; C C
55、语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页带参数的构造函数带参数的构造函数 #include #include class Cstudent private:char Name20; int Id;int Score; public: Cstudent(char n20,int i, int sc=0 ); /构造函数原型声明,有形参,可缺省参数void Display() cout 姓名: Name endl; cout 学号:Id endl; cout 成绩: Score endl; ;Cstu
56、dent:Cstudent(char n20,int i, int sc=0 ) strcpy(Name,n); Id=i; Score=sc; int main()Cstudent Liuwei(“刘伟刘伟”,3301,98), WangWu(“王五王五”, ,3302); /创建两个创建两个Cstudent类对象类对象Liuwei与与 /WangWu,以不同的实参进行初始化以不同的实参进行初始化 Liuwei.Display(); WangWu.Display(); return 0; 执行结果为:执行结果为:姓名:刘伟姓名:刘伟学号:学号:3301成绩:成绩:98姓名:王五姓名:王五学号
57、:学号:3302成绩:成绩:0 0 % 带形参的构造函数根据参数的不带形参的构造函数根据参数的不同完成不同的初始化。同完成不同的初始化。C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页拷贝构造函数拷贝构造函数 当构造函数将自己所在的类的引用作为参数时,称之为拷贝构造函数。 拷贝构造函数的定义如下:C:C(const C&Cx) % 利用“拷贝构造函数”根据已初始化的同类对象来对新创建的对象进行初始化。新对象与被拷贝对象虽然初值相同,但占用不同的存储空间。 C C语言程序设计语言程序设计C C语言程序
58、设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页例例13.17 拷贝构造函数的使用拷贝构造函数的使用#include #include class Cstudent private: char Name20; int Id; int Score; public: Cstudent(char n20,int i, int sc=0 ) /普通构造函数,有形参,可缺省参数 strcpy(Name,n); Id=i; Score=sc; Cstudent(const Cstudent &Cst) /拷贝构造函数,其参数为“引用”常量对象 strcp
59、y(Name,Cst.Name); /利用对象Cst进行初始化 Id=Cst.Id; Score=Cst.Score; void Display() cout“姓名姓名:”Name“ “ “学号学号:”Id“ ” “成绩成绩:”Scoreendl; ;int main()Cstudent LiuWei(“刘伟刘伟”,3301,98); /用普通构造函数创建用普通构造函数创建LiuWei Cstudent WangWu(LiuWei);/用拷贝构造函数创建对象用拷贝构造函数创建对象WangWu/用已有对象用已有对象LiuWei的值对的值对WangWu初始化初始化 LiuWei.Display()
60、; WangWu.Display(); return 0; 程序执行结果:程序执行结果:姓名:刘伟姓名:刘伟 学号:学号:3301 成绩:成绩:98姓名:刘伟姓名:刘伟 学号:学号:3301 3301 成绩:成绩:9898 C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页对没有定义构造函数的类,若类的全部数据成员对没有定义构造函数的类,若类的全部数据成员均为公有数据成员,则其对象的数据成员可以象均为公有数据成员,则其对象的数据成员可以象结构体变量一样来初始化。结构体变量一样来初始化。 #includ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 耐候性材料在幕墙中的应用考核试卷
- 节能型纺织设备能效提升策略考核试卷
- 淀粉在金属表面处理中的应用考核试卷
- 蛋品加工设备选型与应用案例分析考核试卷
- 谷物磨制对城市粮食供应的影响考核试卷
- 糕点店顾客体验与口碑营销考核试卷
- 选矿厂尾矿资源利用与环境保护考核试卷
- 个案护理演讲方法与技巧
- 物流配送车辆租赁与冷链物流解决方案协议
- 电竞选手直播平台时长对赌协议范本
- 血液净化标准操作规程 2021 版
- 婚恋平台合同协议书
- 保护患者隐私权医疗AI技术的伦理要求与实践
- 权益配置与代理关系的成本效益分析
- 2025年贵州省贵阳市云岩区中考模拟语文检测试题(含答案)
- 空地或铺面出租合同协议
- 2025餐饮转让合同协议书 餐饮转让合同协议书范本
- 工会慰问品合同协议
- 国家教育招生考试省指挥中心建设项目实施方案
- GB/T 30565-2025无损检测涡流检测总则
- 食堂承包餐饮管理制度
评论
0/150
提交评论