《C++语言程序设计-谭浩强(156页).doc》由会员分享,可在线阅读,更多相关《C++语言程序设计-谭浩强(156页).doc(155页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-C+语言程序设计-谭浩强-第 155 页第1章 C+的初步知识一、面向对象的基本概念v 对象/实例(object/instance)v 类(class)v 封装(encapsulation)v 继承(inheritance)v 多态(polymorphism)v 重载(overload)v 消息(message)二、C+的开发运行环境1、Visual C+2、GCC:是一个用于Linux系统下编程的编译器3、WinTC4、Dev-C+三、最简单的C+程序#includeusing namespace std;int main()coutThis is a C+ program.;return
2、 0;程序功能:输出一行字符:This is a C+ program.程序注释:(1)预处理命令#include iostream输入、输出流(2)using namespace std; 使用命名空间std。 第一行和第二行是每个C+都有的语句。(3)C+的主函数名与C一样,都是main。(4)C+的输出使用cout cout是输出流对象,是插入运算符。 若要输出一个字符串,将要输出的字符串写在双引号中;若要输出一个整数,1;若要输出一个变量,a;例如:#includeusing namespace std;int main()int a=2;coutThis is a C+ progra
3、m.1a;return 0;#includeusing namespace std;int main()int a,b,sum;cinab;sum=a+b;couta+b=sumab; cin:输入流对象:提取运算符C+中的输入、输出比C更简洁,无需格式控制。输入时用空格或者回车分隔都可以。若想输入一个整数,一个实数,一个字符怎么写?#includeusing namespace std;int main()int a;float b;char c;cinabc;couta=aendl;coutb=bendl;coutc=cendl;return 0;或者#includeusing names
4、pace std;int main()int a;float b;char c;cinabc;couta=aendlb=bendlc=cendl;return 0;(2)/C+的注释符,若注释内容较少,一行即可,那么可以使用/,若注释内容较多,需要多行,那么使用/* */。(3)endl是回车换行符,与n的作用一样。#includeusing namespace std;int max(int x, int y)int z;if(xy) z=x;else z=y;return(z);int main()int a,b,m;cinab;m=max(a,b);coutmax=mn;return 0
5、;程序功能:给两个数x和y,求两数中的大者。程序解释:(1)与C完全一致。涉及到子函数和主函数。#includeusing namespace std;class Studentprivate: int num; int score;public: void setdata() cinnum; cinscore; void display() coutnum=numendl; coutscore=scoreendl;Student stud1,stud2;int main()stud1.setdata();stud2.setdata();stud1.display();stud2.displa
6、y();return 0;程序功能:定义一个学生类和两个学生对象,输入并显示这两个学生的学号和成绩。程序解释:(1)class Student 类的定义class是类定义的关键字。 Student是我们自定义的类名。(2)private和public private后定义的内容(包括数据和函数)只允许类的成员函数使用,类外不能使用。例如: int main() couta) a=b;if(ca) a=c;return a;int max4(int a, int b)if(ab) return a; else return b;而C+通过函数重载,可以使用同一个函数名,实现上述六个子函数的功能。
7、 int max(int a, int b, int c); float max(float a, float b, float c); long max(long a, long b, long c); int max(int a, int b); float max(float a, float b); long max(long a, long b);程序代码:#includeusing namespace std;int max(int a, int b, int c)if(ba) a=b;if(ca) a=c;return a;float max(float a, float b,
8、float c)if(ba) a=b;if(ca) a=c;return a;int main()int a,b,c;float d,e,f;cinabc;coutmax(a,b,c);coutdef;coutmax(d,e,f);/coutmax(1.1,1.2,1.3);return 0;注意:语句coutmax(1.1,1.2,1.3); 编译器提示错误。error C2668: max : ambiguous call to overloaded function作业:P16P175、6、7、8、9、10第二讲第8章 类和对象一、面向过程的程序设计方法和面向对象的程序设计方法1、程序功
9、能 对学生基本信息(学号、姓名、性别)进行输入输出。2、面向过程的程序设计方法#includeusing namespace std;struct Studentint num;char name20;char sex;Student get_information()Student stud;int i;coutstud.num;coutstud.name0;while(stud.namei!=#)i+;cinstud.namei;coutstud.sex;return stud;void display(Student stud)int i;coutnum:stud.numendl;cou
10、tname:;i=0; while(stud.namei!=#) coutstud.namei; i+; coutendl;coutsex:stud.sexendl;int main()Student stud1;stud1=get_information();display(stud1);return 0;程序运行结果:3、面向对象的程序设计方法#includeusing namespace std;class Studentprivate:int num; char name20; char sex;public: void get_information() int i; coutnum
11、; coutname0; while(namei!=#) i+; cinnamei; coutsex;void display( ) int i; coutnum:numendl; coutname:; i=0; while(namei!=#) coutnamei; i+; coutendl; coutsex:sexendl;int main()Student stud1;stud1.get_information();stud1.display();return 0;程序运行结果:程序解释:(1)类如何定义(包括数据和对数据的操作,数据的操作用函数来实现,它们之间的关系更加紧密。)(2)pr
12、ivate和public的作用(3)类与结构体的区别(4)定义对象的方法(类是抽象的,而对象是具体的)(5)面向过程的程序设计中,数据与数据的操作是分离的,而面向对象的程序设计中,封装的思想用类来实现。二、类的成员函数1、类的成员函数与一般函数的区别 它是属于一个类的成员,出现在类体中。 它可以被指定为私有的,也可以被指定为公用的。将需要被外界调用的成员函数指定为public。无需或不能被外界调用的成员函数指定为私有的。例如:#includeusing namespace std;class Studentprivate:int num; char name20; char sex; void
13、 get_name() int i; i=0; cinname0; while(namei!=#) i+; cinnamei;public: void get_information() coutnum; coutname=; get_name(); coutsex;void display( ) int i; coutnum:numendl; coutname:; i=0; while(namei!=#) coutnamei; i+; coutendl; coutsex:sexendl;int main()Student stud1;stud1.get_information();stud1
14、.display();return 0;程序运行结果:或者:#includeusing namespace std;class Studentprivate:int num; char name20; char sex; void get_name() int i; i=0; cinname0; while(namei!=#) i+; cinnamei; void display_name() int i; i=0; while(namei!=#) coutnamei; i+;public: void get_information() coutnum; coutname=; get_name
15、(); coutsex;void display( ) coutnum:numendl; coutname:; display_name(); coutendl; coutsex:sexendl;int main()Student stud1;stud1.get_information();stud1.display();return 0;程序运行结果:思考:对于姓名的输入、输出很麻烦,如果有已经设计好的字符串类,可以直接进行输入和输出就非常方便。例如:#include#includeusing namespace std;class Studentprivate:int num; strin
16、g name; char sex; public: void get_information() coutnum; coutname; coutsex;void display( ) coutnum:numendl; coutname: nameendl; coutsex:sexendl;int main()Student stud1;stud1.get_information();stud1.display();return 0;程序运行结果:注意与未使用string类的区别。2、类外定义成员函数#include#includeusing namespace std;class Studen
17、tprivate:int num; string name; char sex;public: void get_information();void display( );void Student:get_information() coutnum; coutname; coutsex;void Student:display( ) coutnum:numendl; coutname:nameendl; coutsex:sexendl;int main()Student stud1;stud1.get_information();stud1.display();return 0;程序运行结果
18、:3、若增加一个教师类,教师信息包括教工号、姓名、性别,程序需要对教工信息进行输入、输出。#include#includeusing namespace std;class Studentprivate:int num; string name; char sex;public: void get_information();void display( );class Teacherprivate:int num; string name; char sex;public: void get_information();void display( );void Student:get_info
19、rmation() coutnum; coutname; coutsex;void Student:display( ) coutStudent_num:numendl; coutStudent_name:nameendl; coutStudent_sex:sexendl;void Teacher:get_information() coutnum; coutname; coutsex;void Teacher:display( ) coutTeacher_num:numendl; coutTeacher_name:nameendl; coutTeacher_sex:sexendl;int m
20、ain()Student stud1;Teacher tech1;stud1.get_information();coutendl;tech1.get_information();coutendl;stud1.display();coutendl;tech1.display();return 0;程序运行结果:三、对象成员的引用1、访问对象中的成员可以有3种方法:(1)通过对象名和成员运算符访问对象中的成员访问对象中成员的一般形式为:对象名. 成员名例如:stud1.num=1001;stud1.display( );(2)通过指向对象的指针访问对象中的成员class Time public:
21、 int hour; int minute;Time t, *p;p=&t;couthour;(3)通过对象的引用变量访问对象中的成员class Time public: int hour; int minute;Time t1;Time &t2=t1;coutt2.hour;第三讲四、类和对象的简单应用举例1、例题8.1 最简单的例子 程序功能:输入输出时间(包括时、分、秒)。 源代码:#includeusing namespace std;class Timepublic: int hour; int minute; int sec;int main()Time t1;cint1.hour
22、;cint1.minute;cint1.sec;coutt1.hour:t1.minute:t1.secendl;return 0;运行结果:2、例题8.2 输入、输出多个时间。源程序:#includeusing namespace std;class Timepublic: int hour; int minute; int sec;int main()Time t1;cint1.hour;cint1.minute;cint1.sec;coutt1.hour:t1.minute:t1.sect2.hour;cint2.minute;cint2.sec;coutt2.hour:t2.minut
23、e:t2.secendl;return 0;程序运行结果:上述程序中有相同的代码段,因此可以使用子函数对时间进行输入、输出。源程序:#includeusing namespace std;class Timepublic: int hour; int minute; int sec;int main()void set_time(Time &t);void show_time(Time &t);Time t1;set_time(t1);show_time(t1);Time t2;set_time(t2);show_time(t2);return 0;void set_time(Time &t)
24、cint.hour;cint.minute;cint.sec;void show_time(Time &t)coutt.hour:t.minute:t.secendl;运行结果:对于上述程序的参数类型设置,需要特别注意。若将之改为:#includeusing namespace std;class Timepublic: int hour; int minute; int sec;int main()void set_time(Time t);void show_time(Time t);Time t1;set_time(t1);show_time(t1);Time t2;set_time(t
25、2);show_time(t2);return 0;void set_time(Time t)cint.hour;cint.minute;cint.sec;void show_time(Time t)coutt.hour:t.minute:t.secendl;运行结果为:这是不正确的。新知识点:有默认参数的函数定义:源程序:#includeusing namespace std;class Timepublic: int hour; int minute; int sec;int main()void set_time(Time &t, int hour=0, int minute=0, in
26、t sec=0);void show_time(Time &t);Time t1;set_time(t1,12,23,34);show_time(t1);Time t2;set_time(t2);show_time(t2);return 0;void set_time(Time &t,int hour, int minute, int sec)t.hour=hour;t.minute=minute;t.sec=sec;void show_time(Time &t)coutt.hour:t.minute:t.secendl;运行结果:对程序做如下改动:#includeusing namespac
27、e std;class Timepublic: int hour; int minute; int sec;int main()void set_time(Time &t, int hour=0, int minute=0, int sec=0);void show_time(Time &t);Time t1;set_time(t1,12,23,34);show_time(t1);Time t2;set_time(t2,12);show_time(t2);Time t3;set_time(t3,12,23);show_time(t3);return 0;void set_time(Time &
28、t,int hour, int minute, int sec)t.hour=hour;t.minute=minute;t.sec=sec;void show_time(Time &t)coutt.hour:t.minute:t.secendl;运行结果为:体会默认参数的用法。3、例题8.3(类的定义和使用)源程序:#includeusing namespace std;class Timepublic: void set_time(); void show_time();private: int hour; int minute; int sec;int main()Time t1;t1.s
29、et_time();t1.show_time();Time t2;t2.set_time();t2.show_time();return 0;void Time:set_time()cinhour;cinminute;cinsec;void Time:show_time()couthour:minute:secendl;运行结果:通过本例,学会面向对象的程序设计方法。4、例题8.4 找出一个整型数组中的元素的最大值。源程序:#includeusing namespace std;class Array_maxpublic: void set_value(); void max_value();
30、 void show_value();private: int array10; int max;void Array_max:set_value()int i;for(i=0;iarrayi;void Array_max:max_value()int i;max=array0;for(i=1;imax) max=arrayi;void Array_max:show_value()coutmax=max;int main()Array_max arrmax;arrmax.set_value();arrmax.max_value();arrmax.show_value();return 0;运行
31、结果:5、输入、输出点的坐标#includeusing namespace std;class pointprivate: float Xcoord, Ycoord;public: void SetX(float x) Xcoord=x; void SetY(float y) Ycoord=y; float GetX() return Xcoord; float GetY() return Ycoord;int main()point p1;p1.SetX(1.1);p1.SetY(2.2);coutp1.GetX()endl;coutp1.GetY()endl;return 0;运行结果:6
32、、设计一个栈。#includeusing namespace std;const int maxsize=6;#define false 0#define true 1class stackprivate: float datamaxsize; int top;public: int set_null_stack(void); int empty(void); void push(float a); float pop(void); void show(); int stack:set_null_stack(void)top=-1;coutstack initialized.endl;return 0;int stack:empty(void)if (top0) coutstack is empty.;return true;else coutstack is not empty.;return false;void stack:push(float a)if(top=maxsize-1)coutStack overflow!endl;