C++面向对象程序设计第一讲第一章C++的初步知识第二章类和对象第三章关于类和对象的进一步讨论第四章运算符重载第五章继承与派生第六章多态性与虚函数第七章输入输出流结束放映第一章C++的初步知识•1.1从C到C++•1.2C++语言的词法和词法规则•1.3最简单的C++程序•1.4C++对C的扩充•1.5C++程序的编写和实现1.1从C到C++C语言是结构化和模块化的语言,C程序的设计者必须细致地设计程序中的每个细节,准确地考虑程序运行时每一时刻发生的事情,当程序规模变大时,结构化程序设计就显得力不从心。为了解决软件设计危机,在20世纪80年代提出了面向对象的程序设计思想(OOP)在实践中人们发现C语言使用如此广泛,如果在它的基础上发展一种面向对象的语言,一定会让大众容易接收这种语言,所以产生了C++。•AT&T发布的第一个C++编译系统是一个预编译器,它把C++代码转换成C代码,然后再用C编译系统生成目标代码。•1988产生第一个C++编译系统•1989C++2.0类的多重继承•1991C++3.0类的模板•C++4.0异常处理、命名空间•1997ANSI发布C++标准C++既可以用于面向过程的结构化程序设计,也可用于面向对象的程序设计。C++对C的增强体现在两个方面:1.对原来的面向过程机制做了扩充。2.增加了面向对象的机制。学习C++之后,既可以进行面向对象的程序设计,也可以进行面向过程的程序设计。1.2C++语言的词法和词法规则C++语言的字符集等同于C语言的字符集,包括:(1)大小写英文字母(2)数字字符(3)其他ASCII码字符(除@、$外)。单词及词法规则单词是构成语句的关键成份之一,通常由若干字符组成,C++有几种单词:1.关键字2.标识符3.运算符4.分隔符5.注释符。关键字是C++语言中的命令字,它是预定义好的单词,C++编译程序对其有专门的解释。int、float、if、else、while、switch等等。标识符程序员用标识符对程序中元素实施命名,包括函数名、类名、对象名、类型名、变量名、常变量名、数组名等。标识符以字母或下划线开始,后跟字母、数字、下划线,标识符区分大小写字母。运算符运算符代表某种操作的单词,由一个或多个字符组成。注意运算符的优先级和结合顺序。参考本书附录B(P287)。分隔符在语句中关键字和标识符之间、各个语句之间要用分隔符分开。C++常用的分隔符有空格、逗号、分号、冒号、大括号。注释符C++提供了两种注释符。/*注释*///注释1.3最简单的C++程序例1.1输出一行字符“ThisisaC++program.”。#includeiostream//用cout输出时需要用//此头文件usingnamespacestd;//使用命名空间stdintmain(){coutThisisaC++program.\n;//上面用C++的方法输出一行return0;}(1)标准C++规定main函数必须声明为int类型,如果程序正常运行,向操作系统返回一个零值,否则返回非零值,通常是-1。(2)C++程序中可以用/*…*/做注释,可以用//做注释。前者可以做多行注释,后者只做单行注释。(3)C++程序中常用cout、cin进行输出输入,cout是C++定义的输出流对象,是插入运算符。•(4)使用cout、cin需要用头文件iostream,在程序开始要用#include声明包含的头文件。•(5)usingnamespacestd;意思是使用命名空间。C++标准库中的类和函数是在命名空间std中声明的,因此程序中如用C++标准库中的有关内容(此时需要用#include命令行),就要用usingnamespacestd;语句声明。例1.2求a和b两个数之和•//求两数之和•#includeiostream//预处理命令•usingnamespacestd;//使用命名空间std•intmain()//主函数首部•{//函数体开始•inta,b,sum;//定义变量•cinab;//输入语句•sum=a+b;//赋值语句•couta+b=sumendl;//输出语句•return0;//如程序正常结束,返回一个零值•}•cin是C++定义的输入流对象。””是提取运算符,与cin配合,其作用是从输入设备中提取数据送到输入流cin中。在程序执行时,键盘输入的第一个数据赋予a,第二个数据赋予b。•cout语句中的endl是C++控制符常数,作用是让光标换行。•如果在本程序运行时输入:•123456回车•程序则输出:•a+b=579•例1.3求两个数中的大数•#includeiostream•usingnamespacestd;•intmain()•{intmax(intx,inty);//对max函数作声明•inta,b,c;•cinab;•c=max(a,b);//调用max函数•coutmax=cendl;•return0;•}•intmax(intx,inty)//定义max函数•{intz;•if(xy)z=x;•elsez=y;•return(z);•}••本程序包含两个函数,主函数main和被调用的函数max。max函数的作用是将两个整数中的大数赋予变量z。return语句将z的值返回给主函数main。返回值是通过函数名max带回到main函数的调用处。•程序运行情况如下:•1825(输入18和25)•max=25(输出最大值25)第二讲例1.4包含类的C++程序#includeiostreamusingnamespacestd;classStudent//声明一个类,类名为Student{private://以下为类中的私有部分intnum;//私有变量numintscore;//私有变量scorepublic://以下为类中公用部分voidsetdata()//定义公用函数setdata{cinnum;//输入num的值cinscore;}//输入score的值voiddisplay()//定义公用函数display{coutnum=numendl;//输出num的值coutscore=scoreendl;};//输出score的值};//类的声明结束Studentstud1,stud2;//定义stud1和stud2为Student类的变量,称为对象•intmain()//主函数首部•{stud1.setdata();//调用对象stud1的setdata函数•stud2.setdata();//调用对象stud2的setdata函数•stud1.display();//调用对象stud1的display函数•stud2.display();//调用对象stud1的display函数•return0;•}•程序中声明一个被称为类的类型Student。声明时要用关键字class。C++类中可以包含两种成员即数据(如变量num、score)和函数(如setdata函数和display函数)。分别称为数据成员和成员函数。•在C++中将一组数据和访问这组数据的函数封装在一起,组成类。一个类是由一组数据,一组对其访问的若干函数,以及数据和函数的访问属性组成的。在前面程序中看到的private(私有)public(公有)保留字代表数据和函数的访问属性。•凡是指定为公有的数据和函数,既可由本类的函数访问和调用,也可由其他函数或语句访问和调用;凡是指定为私有的数据和函数,通常只能由本类的函数访问和调用。•程序中“Studentstud1,stud2;”是一个定义语句,定义两个Student类型变量stud1和stud2,Student类与int一样是C++的合法类型。•具有类类型的变量称为对象。Student的对象stud1,stud2具有同样的结构和特征。•在类外调用成员函数时必须在函数名前冠以类的名称。••主函数中第一条语句输入学生1的学号和成绩,第二条语句输入学生2的学号和成绩,第三条语句输出学生1的学号和成绩,第四条语句输出学生2的学号和成绩。程序运行情况如下:•100198.5回车•100276.5回车•num=1001•Score=98.5•num=1002•Score=76.5•为了与C兼容,C++保留了C语言中的一些规定,例如头文件的文件名,以C语言里头文件的扩展名是.h,许多C++编译系统保留了这种扩展名,近年推出的C++编译系统新版本,推出了一批不带扩展名的头文件如iostream,string,cmath等。为了兼容C++仍允许使用带扩展名的头文件。由于C语言无命名空间,因此使用带扩展名的头文件时不用usingnamespacestd。1.3C++对C的扩充•C++既可用于面向过程的程序设计,也可用于面向对象程序设计。C++继承了C语言提供的绝大部分功能和语法规定,并在此基础上作了扩充。•1.4.1C++的输入和输出•1.4.2用const定义常变量•1.4.3函数原型声明•1.4.4函数的重载•1.4.5函数模板•1.4.6有默认参数的函数•1.4.7变量的引用•1.4.8内置函数•1.4.9作用域运算符•1.4.10字符串变量•1.4.11动态分配/回收内存运算符1.3.1C++的输入输出•C++为了方便使用,除了可以利用printf和scanf函数进行输入和输出外,还增加了标准输入流输出流cin和cout。它们是在头文件iostream中定义的,标准流是不需要打开文件和关闭文件就能直接操作的流式文件,在此标准输入流是指从键盘上输入的数据,标准输出流是指向屏幕输出的数据流。C++预定义的标准流如表1.2所示。1.用cout进行输出•格式:•cout表达式1[表达式2……]•功能:由左向右逐个计算表达式的值,将其插入到输出流cout中。•cout必须与输出运算符一起使用,每个后跟一个表达式,运算符的结合方向是从左向右,所以各个表达式的值按从左到右的顺序插入到输出流中。•For(k=1;k=3;k++)•cout“k=“kendl•endl是C++输出流的常数,在头文件iostream中定义,代表让光标换行。在C++中也可以用”\n”控制光标换行。所以输出语句也可写成:•cout“k=“k“\n”2.用cin进行输入•格式:•cin变量1[变量2……]•是C++的提取运算符,表示从标准输入设备取得数据,赋予其后的变量。•从键盘输入数值数据时,两个数据之间用空格分隔或用回车分隔。•inta;floatb•cinab;•从键盘输入•2032.45回车例1.5cin和cout的使用•#includeiostream•usingnamespacestd;•intmain()•{coutpleaseenteryournameandage:endl;•charname[10];•intage;•cinname;•cinage;•coutyournameisnameendl;•coutyourageisageendl;•return0;•}1.3.2用const定义常变量•格式:•const类型变量名=常数•例:constfloatPI=3.14159;1.3.3函数原型声明•C++规定,如果函数调用在函数定义之前,要求在调用之前声明该函数的原型。•格式:函数类型函数名(形参表);•形参表中形参可以只写类型。•例:intmax(intx,inty);•或intmax(int,int);•其实C++编译时,只检查参数的数据类型。1.3.4函数的重载•C++允许在同一个域中用一个函数名定义多个函数,这些函数的参数个数、参数类型不相同。用一个函数名实现不同的功能,就是函数的重载。•例1.6设计程序计算三个数中的大数•#includeiostream•usin