《面向对象程序设计期末复习指导.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计期末复习指导.ppt(57页珍藏版)》请在第壹文秘上搜索。
1、C+C+编程基础编程基础1 1程序流程控制程序流程控制2 2#includevoid main() int a,b; a=3;b=5; couta b; coutendl; #includevoid main() int x=5; switch(2*x-3) case 4: coutx ; case 7: cout2*x+1 ; case 10: cout3*x-1 ; break; default: coutdefaultendl; coutswitch end.b) couta; else coutb; 运行结果:运行结果:11 14 switch end.图图2.2 dowhile语句语
2、句 图图2.1 while语句语句 图图2.3 for语句语句 #include#includevoid main() int a8=25,48,32,85,64,18,48,29; int max,min; max=min=a0; for(int i=1; i8; i+) if(maxai) min=ai; coutmax:maxendl; coutmin:minendl; #include#includevoid main() int a8=25,48,32,85,64,18,48,29; int max,min,i; max=min=a0; i=1; while(i8) if(maxai
3、) min=ai; i+; coutmax:maxendl; coutmin:minb) if (ab) int swap=a; int swap=a; a=b; a=b; b=swap; b=swap; void sort(int &a, int &b, int &c) void sort(int &a, int &b, int &c) int swap; int swap; if (ab) if (ab) swap=a; a=b; b=swap; swap=a; a=b; b=swap; if (ac) if (ac) swap=a; a=c; c=swap; swap=a; a=c; c
4、=swap; if (bc) if (bc) swap=b; b=c; c=swap; swap=b; b=c; c=swap; u 内联函数内联函数u 函数重载函数重载u 递归函数递归函数 double fact(int n) if (n= =1) ruturn 1; else return(n*fact(n-1);指针与数组指针与数组4 4数组的定义方法为数组的定义方法为 类型说明类型说明 数组名数组名 常量表达式常量表达式 l 数组名代表了这些具有相同类型的元素的集合数组名代表了这些具有相同类型的元素的集合l 常量表达式的值代表元素个数常量表达式的值代表元素个数l 类型说明表明了元素的类
5、型类型说明表明了元素的类型如:如:char name 20char name 20; int studentAge10int studentAge10* *1010; /定义了一个具有定义了一个具有100100个整型值的数组变量个整型值的数组变量studentAgestudentAgel数组元素在内存占用连续的空间,数组名就是这个数组元素在内存占用连续的空间,数组名就是这个空间的首地址空间的首地址l数组元素和一般变量一样可单独使用数组元素和一般变量一样可单独使用l数组名加下标的方式来访问数组的每个元素,数组数组名加下标的方式来访问数组的每个元素,数组的下标从的下标从0 0开始开始l多维数组的所
6、有元素在内存也是线形存放多维数组的所有元素在内存也是线形存放 字符串数组是一种经常使用的二维数组字符串数组是一种经常使用的二维数组l 以空字符结束的字符数组以空字符结束的字符数组l 可直接从键盘读入一个字符串可直接从键盘读入一个字符串l 一个字符串可直接送到显示器上一个字符串可直接送到显示器上l一个变量可用于存放其他变量的地址,则称该变量为指一个变量可用于存放其他变量的地址,则称该变量为指针变量,简称为指针针变量,简称为指针l指针变量定义的一般形式:指针变量定义的一般形式: 类型说明符类型说明符 * *指针变量名;指针变量名;l如:如:int int * * ip; ip; 定义一个指向整型空
7、间的指针定义一个指向整型空间的指针 char char * * str; str;l 指针本身也是一种变量,占有存储空间,用来存放指针值指针本身也是一种变量,占有存储空间,用来存放指针值l 指针是另一个变量在内存中的地址,只允许取整的整数值指针是另一个变量在内存中的地址,只允许取整的整数值l 所有合法指针变量应当是非所有合法指针变量应当是非0 0值,若某指针取值,若某指针取0 0值,即值,即nullnull,则表示该指针所指向的对象不存在,即空指针则表示该指针所指向的对象不存在,即空指针l 多种数据类型对应有其相应的指针类型,指向某种数据类多种数据类型对应有其相应的指针类型,指向某种数据类型变
8、量的指针,称为该类型的指针型变量的指针,称为该类型的指针l 某类型指针变量的增某类型指针变量的增1 1(或减(或减1 1)引起地址增加)引起地址增加1 1(或减(或减1 1)取决于一个该类型数据所占字节数取决于一个该类型数据所占字节数例:例:#include void f2(int& x, int& y) int z=x; x=y; y=z; void f3(int* x, int* y) int z=*x; *x=*y; *y=z; void main() int x=10,y=26; coutx,y=x, yendl; f2(x,y); coutx,y=x, yendl; f3(&x,&y
9、); coutx,y=x, yendl; x+; y-; f2(y,x); coutx,y=x, yendl; l 数据和操作分离引出的问题:数据和操作分离引出的问题: - - 程序修改较麻烦,改变数据的定义,寻找分散的程序有程序修改较麻烦,改变数据的定义,寻找分散的程序有困难;困难; - - 可靠性差,一致性难以保证;可靠性差,一致性难以保证;l 类是数据和对这些数据进行操作的函数的封装体。类是数据和对这些数据进行操作的函数的封装体。l 定义:定义: Class Class 类名类名 类定义体类定义体 ;类与对象类与对象5 5“学类真累学类真累”“类不是累类不是累累也学类累也学类”l 函数名
10、与类名相同函数名与类名相同 l 无函数返回类型说明无函数返回类型说明l 系统自动被调用系统自动被调用l 可以重载可以重载 #include#includeclass A char *a; public: A(char *s) a=new charstrlen(s)+1; strcpy(a,s); coutaendl; A() delete a; cout“撤销对象撤销对象!endl; ;void main() A x(“黑龙江黑龙江); A *y=new A(“电大电大); delete y; 黑龙江黑龙江 电大电大 撤销对象!撤销对象! 撤销对象!撤销对象!继 承 与 派 生 类继 承 与
11、派 生 类5 5基类(父类)基类(父类)派生类(子类)派生类(子类)派生类(子类)派生类(子类)class Vehicle public: void EditSC(float speed,int total); /成员函数 protected: float speed; /速度 int total; /最大载人量 ; void Vehicle:EditSC(float speed,int total) Vehicle:speed = speed; Vehicle:total = total; class Car:public Vehicleclass Car:public Vehicle /
12、/定义定义CarCar类,是类,是VehicleVehicle的派生类的派生类 public: public: Car() aird=0; Car() aird=0; protected: protected: int aird;/ int aird;/排量排量 ; ; class plane:public Vehicle class plane:public Vehicle / /定义定义CarCar类,是类,是VehicleVehicle的派生类的派生类 protected: protected: float wingspan;/ float wingspan;/翼展翼展 ; ; 派生类的
13、定义举例派生类的定义举例#include class Base public: Base (int i,int j) x=i; y=j; void Move(int a,int b) x+=a; y+=b; void Show() coutBase(x,y)endl; private: int x,y;class Derived1: private Base public: Derived1(int i,int j,int m,int n):Base(i,j) x=m; y=n; void Show () coutNext(x,y)endl; void Show1() Base:Show();
14、 private: int x,y;class Derived2: public Base public: Derived2(int i,int j,float m):Base(i,j) x=m; Move(int n) x*=n; void Show2() Base:Show(); private: float x;疑问疑问1 1:派生类的函数成员是不是可以自由的:派生类的函数成员是不是可以自由的 访问原本在基类中的成员?访问原本在基类中的成员?疑问疑问2 2:基类成员的访问控制是否在派生类中:基类成员的访问控制是否在派生类中 还是保持不变?还是保持不变?基类成员基类成员的访问控制的访问控制
15、继承方式继承方式定义派生类对象时定义派生类对象时, ,构造函数的执行顺序构造函数的执行顺序: :u 调用基类的构造函数调用基类的构造函数; ;u 顺序调用内嵌对象成员的构造函数顺序调用内嵌对象成员的构造函数; ;u 调用派生类的构造函数体中的内容。调用派生类的构造函数体中的内容。析构函数的执行顺序:析构函数的执行顺序:u 撤消对象时撤消对象时, ,析构函数的调用顺序与析构函数的调用顺序与 构造函数的调用顺序正好相反。构造函数的调用顺序正好相反。 #include #include class Point /定义基类定义基类PointPoint int x,y; public: Point(in
16、t x1=0, int y1=0) :x(x1), y(y1) coutPoint:x yn; Point() cout“Point 对象撤销对象撤销!n; ;xyclass Text /定义基类定义基类TextText char text100;/文字内容文字内容 public: Text(char * str) strcpy(text,str); cout“Text 构造函数执行构造函数执行!n; Text() cout“Text 对象撤销对象撤销!n; ;TextText0Text99class CircleWithText : public Point /定义派生类定义派生类 Text msg; float total; public: CircleWithText(int cx,int cy, char *ms,float x): Point(cx,cy),msg(ms) total=x; cout“total=”total; CircleWithText() cout“Point with Text 对象撤销对象撤销n; ;void main( ) CircleWithTe