面向对象复习
更新时间:2023-11-13 20:54:01 阅读量: 教育文库 文档下载
一、程序填空
1、完成下面类的定义: #include
Person(char *nam)
{ (1) ;//为name 申请内存空间 (2) ;//给name初始化 cout<<\}
~ Person ( )
{ (3) ;//释放内存空间 cout<<\}
void show( ); private:
char *name; };
void Person::show( ) {cout< {Person student1(\ (4) .show( ); } 2、定义一个Point类,由它公有派生出矩形类Rectangle和圆类Circle,计算各派生类对象的面积。 #include double x,double y; public: Point(double a,double b){x=a; (5) ;} }; class Rectangle: (6) {public: square(double a,double b): (7) { } void area(); }; void Rectangle ::area( ) { cout<<\ (8) < 1 Circle (double a,double b,double c): (9) { r=c;} void area(); private: double r; }; void Circle ::area( ) { cout<<\ (10) < { Rectangle r(5.5,6.0); Circle c(0,0,5.0); r.area( ); c.area( ); } 3、利用友元函数实现比较两个点离原点的距离。 #include Point(double xx,double yy) { (11) ; (12) ;} void Getxy( ) ; (13) int compare(Point &a, Point &b); private: double x,y; } ; void (14) Getxy( ) {cout<<\ int compare(Point &a, Point &b)//若a比b更近,则返回0,否则返回1 { (15) ; double db=b.x*b.x+b.y*b.y ; return (16) ; } void main( ) { Point p1(1.0,3.0),p2(2.0,4.0); cout<<\ cout<<\ int d= (17) ; if(!d) cout<<\ else cout<<\ } 4、实现复数类的输入和输出重载。 #include 2 double real,imag; public: (18) ostream& operator<<(ostream&,Complex&); friend istream& operator>>(istream&,Complex&); }; ostream& operator<<(ostream& output,Complex& c) {output<<\ (19) ; } istream& operator>>(istream& input,Complex& c) {cout<<\input>>c.real>>c.imag; (20) ; } void main() {Complex c1,c2; cin>>c1>>c2; cout<<\ cout<<\} 5、以下程序在M行N列的二维数组中,找出每一行上的最大值,显示最大值的行号、列号和值,请填空。 #include (1) ; int x[M][N]=(1,5,6,4,2,7,4,3,8,2,3,1); for( (2) ;i for( (3) ;j cout< 6、下列程序求两点之间的距离,请填空。 #include double x,double y; public: Point(double a,double b){ (6) ;} double distance(Point &p) ; }; 3 double Point :: distance(Point &p) { double dx= (7) ; double dy= (8) ; return sqrt(dx*dx+dy*dy); } void main( ) { Point p1(2,3),p2(5,6) ; cout<< (9) < 7、定义一个关于日期的类,然后声明对象,判断该日期是否为闰年并输出。 #include public: void SetDate(int y,int m,int d); int isLeapYear( ); void Print( ); (10) int year,month,day; }; void TDate::SetDate(int y,int m,int d) { year=y; (11) ;day=d;} int TDate::is LeapYear( ) { return ( (12) )||(year@0==0); } void TDate::Print() {cout< {TDate date1,date2; date1.SetDate(2006,8,8); date2.SetDate(2008,8,8); int leap= (13) ; date1.Print(); if( (14) ) cout< cout< 8、将文件内容保存在另一文件中,并将内容显示到屏幕上。 #include 4 void main( ) { fstream file1; file1.open(?x1.dat?, (15) ); if( (16) ) {cout< fstream file2; file2.open(?x2.dat?,ios::out|ios::trunc); if( (17) ) {cout< while( (18) ) { file1.read(&ch,1); cout< (19) ; } (20) ; file2.close( ); } 9、下列程序的功能是对10个整数用选择法排序。 #include #define SIZE (sizeof(data)/(sizeof(data[0])) void main( ) {int datra[ ]={12,23,9,34,45,7,78,-33,59,3}; int i,j,k,t; cout< for(i=0;i { (1) ; for(j= (2) ;j<= SIZE;j++) if(data[j] cout< for(i=0;i Person(char *nam) { (4) ;//为name 申请内存空间 5 (5) ;//给name初始化 cout<<\} ~ Person ( ) { (6) ;//释放内存空间 cout<<\} void show( ); private: char *name; }; void Person::show( ) {cout< {Person student1(\ (7) .show( ); } 11、定义一个Point类,由它公有派生出矩形类Rectangle和圆类Circle,计算各派生类对象的面积。 #include double y; public: Point(double a,double b){x=a; (8) ;} }; class Rectangle: (9) {public: square(double a,double b): (10) { } void area(); }; void Rectangle ::area( ) { cout<<\ (11) < Circle (double a,double b,double c): (12) { r=c;} void area(); private: double r; }; void Circle ::area( ) { cout<<\ (13) < 6 void main( ) { Rectangle r(5.5,6.0); Circle c(0,0,5.0); r.area( ); c.area( ); } 12、利用友元函数实现比较两个点离原点的距离。 #include Point(double xx,double yy) { (14) ; (15) ;} void Getxy( ) ; (16) int compare(Point &a, Point &b); private: double x,y; } ; void (17) Getxy( ) {cout<<\ int compare(Point &a, Point &b)//若a比b更近,则返回0,否则返回1 { (18) ; double db=b.x*b.x+b.y*b.y ; return (19) ; } void main( ) { Point p1(1.0,3.0),p2(2.0,4.0); cout<<\ cout<<\ int d= (20) ; if(!d) cout<<\ else cout<<\ } 13、此程序的功能是求Fibonacci 数列前40个数,请填空。 #include (1) ; for(i=1;i<=20;i++) {cout< 7 (3) ;} } 14、此程序的功能是:构造一个类Box,含有3个数据成员,分别表示盒子的3条边长,还有一个成员函数,用来计算盒子的体积,请给程序填空。 #include double line,width,height; double volume; public: Box(double a, double b, double c); void vol( ); }; (4) (double a, double b, double c) { line=a;width=b;height=c; (5) ; } void Box::vol( ) { cout< { Box x(3.4, 4.5, 8.3),y(2.0, 4.0, 6.0); x.vol( ); y.vol( ); } 15、下列程序是有一个基类figure,派生两个square和isosceles_triangle,让每一个派生类都定义一个函数area(),分别用来显示矩形与等腰三角形的面积,请给程序填空。 请给程序填空。 #include double height, width; }; class square: (7) {public: square(double h,double w); void area(); }; class isosceles_triangle: (8) {public: isosceles_triangle(double h,double w); void area(); }; square::square(double h,double w){height=h;width=w;} void square::area() {cout<<\ (9) < 8 isosceles_triangle::isosceles_triangle(double h,double w) {height=h;width=w;} void isosceles_triangle::area() {cout<<\ (10) < { square s(10.0,6.0); isosceles_triangle i(8.0,6.0); s.area();i.area(); } 16、有一个向量Vector,包括一个点的坐标位置x和y,设计两个友元函数add() 和sub(),实现两个向量的加法和减法,请填空。 #include Vector(){} Vector( (11) ) {x=i;y=j;} void disp() {cout<<\ (12) (Vector &v1,Vector &v2) {Vector v; v.x=v1.x+v2.x; (13) ; return v; } (14) (Vector &v1,Vector &v2) {Vector v; (15) ; v.y=v1.y-v2.y; return v; } }; void main() {Vector v1(10,20),v2(4,5),v3; v3=add(v1,v2); cout<<\ cout<<\v3.disp();cout< v1.disp();cout<<\} 17、下列程序对复数类Complex的减法进行运算符的重载,请填空。 #include 9 {private: double real; double imag; public: Complex(){ (16) } Complex(double r,double i) { (17) } friend Complex operator-(Complex &c1,Complex &c2); void display(); }; (18) (Complex &c1,Complex &c2) { (19) ; c.real=c1.real-c2.real; c.imag=c1.imag-c2.imag; (20) ; } 18、下列程序求解矩形两条对角线的元素之和。 #include int i,j,sum1,sum2; int a[][4]={43,54,32,5,46,98,74,24,39,58,46,25,81,42,67,20}; sum1=0; (1) ; for(i=0;i<4;i++) for(j=0;j<4;j++) { if( (2) ) sum1+=a[i][j]; if( (3 ) sum2+=a[i][j]; } cout< 19、完成下面类的定义: #include Student(char *,int,float); 10 ~Student( ); void show( ); }; Student::Student(char *nam,int n,float sco) { (4) ;//为name 申请内存空间 (5) (name,nam);//给name初始化 num=n; score=sco; } Student::~Student( ) { (6) ;//释放内存空间 } 20、已知有一个基类figure,要求建立两个继承figure的派生类square和isosceles_triangle,每一个派生类都定义一个函数area(),分别用来显示矩形与等腰三角形的面积。 #include double height; double width; }; class square: (7) figure {public: square(double h,double w); void area(); }; class isosceles_triangle: (8) figure {public: isosceles_triangle(double h,double w); void area(); }; square::square(double h,double w) { (9) } void square::area() {cout<<\ (10) < void isosceles_triangle::area() {cout<<\ (12) < {square s(10.0,6.0); isosceles_triangle i(8.0,6.0); s.area(); i.area();} 21、下列程序定义了函数模板,实现了双精度和字符串各模板函数的调用。 11 #include { (14) } char *min(char *a,char *b) {return (15) } void main( ) {double a=3.56,b=8.23; char s1[]=\ cout<<\中较小者:\cout<<\中较小者:\} 22、下列程序是把数据输出到文件c:\\\\new.dat 中,然后读出并显示出来。 #include int no; char name[20]; }; void main( ) { int i; struct Person worker[M]={1,'Jonh',2, 'Rose'}; fstream file; file.open(?c:\\\\new.dat?, (16) ); if( (17) ) {cout< for(i=0;i file.open(?c:\\\\new.dat?, (19) ); for(i=0;i {file.read((char *)&worker[i],sizeof(Person)); cout< } (20) } 23、下列程序将100-200之间不能被3整除的数输出,每行输出5个数。 12 #include int i,count=0; for(i=100;i<=200;i++) { if( (1) ) continue; cout< 24、下面的类定义了拷贝构造函数,请完成该类的定义和实现。 #include public: MyClass(int xx=0,int yy=0){X=xx;Y=yy;} (4) ; private: int X,Y; }; MyClass:: (5) ; { X= (6) ; Y=p.Y; } 25、定义一个点类Point,用构造函数初始化类Point的对象,成员函数Distance计算平面上两点之间的距离。 #include double x; double y; (8) Point(double a,double b); void Distance(Point p); }; Point::Point(double a,double b) { (9) } void Point::Distance(Point p) 13 { double dis; dis= (10) ; cout<<\平面上这两点间距离为:\} void main( ) {Point p1(2.0,2.0),p2(4.0,4.0); P1.Distance(p2); } 26、定义类coord,用模板实现此类对象的比较,比较时使用了运算符的重载。 #include coord(int x1,int y1) { (11) } int getx(){return x;} int gety(){return y;} int operator<(coord &c); }; int coord::operator<(coord &c) {if(x (13_) obj &min(obj &o1,obj &o2) {if(o1 void main() { coord c1(5,11),c2(6,18); coord c3= (15) ; cout<<\较小者的坐标:(\ double d1=1.5,d2=5.6; cout<<\较小实数:\} 27、下面程序用于统计文件abc.txt中的字符个数,请填空。 #include 14 { fstream file; file.open(“abc.txt”,ios::in); if( (17) ) {cout<<“abc.txt cannot open”< abort(); } char ch; int i=0; while(!file.eof()) { (18) ; (19) ; } (20) ; } 28、在下面程序段横线处填上适当的内容。 class A { ________ int n; public: A(int nn=0):n(nn) { if(n= =0) a=0; else a=new int [n] ; } _____________________ // 定义析构函数,释放动态数组空间 }; 29、下面程序三次调用同一函数 sum ,在横线处填上适当内容,使输出结果为: S=2 S=5 S=9 程序如下: #include static int s; ____________; cout<< ″ S= ″ < void main (void) { 15 int i; for (i=0;________ ) sum(i); } 30、 class A { int a,b; public: A(int aa=0,int bb=0)_____________{} //分别用39和bb对应初始化a和b }; main() { ___________; //定义类A的对象x并用5初始化数据成员a,同时定义y并用x初始化 数//据成员a ___________; //定义p指针,使之指向对象x } 31、仔细阅读下列求两个点之间距离的程序,根据程序的输出结果在划线处填入正确语句。 #include class point { float x,y; public: point(float a,float b) { x=a; y=b; } float distance(point &p) { float dx=_________________; float dy=_________________; return (float) sqrt (dx*dx+dy*dy); } }; void main() { point p1(2,3),p2 (32,43); cout<<___________________< 32、两个复数只有当它们的实部和虚部分别相等时,才被认为它们相等。在空格处填入合适的内容,以完成下面的程序,使其重载运算符“= =”,用以比较两个复数的相等。请在主函数中输出比较的结果。 #include 16 double real,imag; public: complex(double r,double i) { real=r; imag=i; } bool operator= =(complex &); }; bool complex:: operator= =(complex &com) { return bool (_______________________________); } void main( ) { complex c1(12.3,32.5),c2(21.7,18.6); if( ___________ ) cout<<”true\\n”; else cout<<”false\\n”; } 33、在下面程序的横线处填上适当字句,使该程序执行结果为6。 #include int X; public: ________________________________ // 为X置值 _________________________________ // 取X值 }; void main() { base test; test.init(6); cout< 34、设计可流的复数类,即要求在复数类中重载输入运算符“>>”和输出运算符“<<”。 #include double real,imag; ostream& operator<<(ostream&,Complex&); friend istream& operator>>(istream&,Complex&); }; ostream& operator<<(ostream& output,Complex& c) { <<\return output;} 17 istream& operator>>(istream& input,Complex& c) {cout<<\ >>c.real>>c.imag; return ;} void main() {Complex c1,c2; >>c1>>c2; \\\\输入c1和c2 <<\输出c1和c2 } 35、 此程序的功能是:构造一个类Box,含有3个数据成员,分别表示盒子的3条边长,还有一个成员函数,用来计算盒子的体积,请给程序填空。 #include double line,width,height; double volume; : Box(double a, double b, double c); void vol( ); }; (double a, double b, double c) { line=a;width=b;height=c; ; } void Box::vol( ) { cout< { Box x(3.4, 4.5, 8.3),y(2.0, 4.0, 6.0); x.vol( ); y.vol( ); } 36、完成下面类的定义: #include Person(char *nam) { ;//为name 申请内存空间 ;//给name初始化 cout<<\} ~ Person ( ) { ;//释放内存空间 cout<<\ 18 } void show( ); private: char *name; }; void ::show( ) {cout< {Person student1(\ .show( );} 37、定义一个Point类,由它公有派生出矩形类Rectangle和圆类Circle,计算各派生类对象的面积。 #include double y; public: Point(double a,double b){x=a; ;} }; class Rectangle: {public: Rectangle (double a,double b):Point(a,b){ } void area(); }; void Rectangle ::area( ) { cout<<\Rectangle is:\ < Circle (double a,double b,double c): { r=c;} void area(); private: double r; }; void Circle ::area( ) { cout<<\ < { Rectangle r(5.5,6.0); Circle c(0,0,5.0); r.area( ); c.area( ); } 38、设计一个2行3列的矩阵类Matrix,重载流插入运算符 \和流提取符\,使之能用于该矩阵的输入和输出。 19 #include friend ostream& operator<<(ostream& output,matrix& m); friend istream& operator>>(istream& input,matrix& m); }; ostream& operator<<(ostream& output,matrix& m) { for(int i=0;i<2;i++) {for(int j=0;j<3;j++) < istream& operator>>(istream& input,matrix& m) { cout<<\输入6个数:\for(int i=0;i<2;i++) for(int j=0;j<3;j++) >>m.a[i][j]; return ; } void main() {matrix m; >>m; < 39、设计一个包括姓名、学号和成绩的学生类;先把1个学生数据写入文件aaa.dat中,再从文件中读出该学生数据并显示在屏幕上。 #include char name[20]; long number; int score; Student(char *na = “0”, long nu = 0, int sc = 0) 20 25、 在类定义中,类说明以关键字class 开始,其后跟( ),它必须是一个有效的C++标识符。 26、( )运算符用于向系统动态申请一块内存空间。 27、从基类产生派生类的方法一般分为( )和( )两种。 28、cout与操作符( ) 配合可用于键盘输入,它包含在头文件 ( ) 中。 29、( )运算符用于释放由new运算符动态分配的存储空间。 30、异常处理过程主要有三个步骤,对应的各个步骤的关键字分别是:throw、( )和( )。 五、简答题 1、什么叫运算符重载?运算符重载有什么意义? 2、友元方法有什么优点和缺点? 3、什么叫虚基类?怎样解决多重继承中成员变量的二义性问题? 4、解释类模板与模板类。其中哪个可以用来定义对象? 5、什么样的析构函数不能设计为空?析构函数可以重载吗? 6、什么叫多重继承?什么叫公共基类? 7、什么叫抽象类?抽象类有什么用途? 8、写出类模板的语句格式,说明类模板的使用方法。 41 }; { } ;// 给name初始化 number = nu; score = sc; void main(void) { Student stu1(\张三\ char fileName[] = \ fileOut(fileName, ios::binary); fileOut. ; //关闭文件 //打开二进制输出文件 //写文件 fileOut.write((char *)&stu1, sizeof(class Student)); fileIn(fileName, ios::binary);//打开二进制输入文件 fileIn. ((char *)&stu2, sizeof(class Student));//读文件 fileIn.close(); cout << \姓名:\cout << \学号:\ cout << \成绩:\ } 40、下列程序是有一个基类figure,派生两个square和isosceles_triangle,让每一个派生类都定义一个函数area(),分别用来显示矩形与等腰三角形的面积,请给程序填空。 请给程序填空。 #include double height, width; }; class square: {public: square(double h,double w); void area(); }; class isosceles_triangle: {public: isosceles_triangle(double h,double w); void area(); }; square::square(double h,double w){height=h;width=w;} void square::area() {cout<<\ < void isosceles_triangle::area() 21 {cout<<\ < { square s(10.0,6.0); isosceles_triangle i(8.0,6.0); s.area();i.area(); } 41、此程序的功能是:构造一个类Box,含有3个数据成员,分别表示盒子的3条边长,还有一个成员函数,用来计算盒子的体积,请给程序填空。 #include double line,width,height; double volume; : Box(double a, double b, double c); void vol( ); }; (double a, double b, double c) { line=a;width=b;height=c; ; } vol( ) { cout< { Box x(3.4, 4.5, 8.3),y(2.0, 4.0, 6.0); x.vol( ); y.vol( ); } 二、写出运行结果 1、 #include int a[]={1,3,5,7,9}; int *p=a; cout<<*p<<*(p++)<<*(p+2)< #include 22 } }; void main() {X a(?a'); X b(?b'); X c(?c'); } 3、 #include A(){cout<<“constructing A”< class B:public A {public: B(){cout<<“constructing B”< class C:public B {public: C(){cout<<“constructing C”< void main() { C c1; } 4、 #include virtual void fun( ){cout< class base2 {public: void fun( ){cout< class derived:public base1,public base2 {public: void fun( ){cout< void main( ) { base1 *p1; base2 *p2; derived obj; 23 p1=&obj;p1->fun( ); p2=&obj;p2->fun( );} 5、 #include { int a[]={1,2,3,4,5,6},*p; for(p=&a[5];p>=a;p--) cout<<*p<<\ cout< #include cout<<\ } Myclass(int a) {cout< ~Myclass() {cout< void main() { Myclass m1(20); Myclass m2; } 7、 #include A(){cout<<\ ~A(){cout<<\}; class B {public: B(){cout<<\ ~B(){cout<<\ 24 }; class C:public A, public B {public: C(){cout<<\ ~C(){cout<<\ }; void main( ) { C obj; } 8、 #include virtual void fun1( ){cout< class derived:public base {public: void fun1( ){cout< void main( ) { base *p; derived d; p=&d; p->fun1( ); p->fun2( ); p->fun3( ); p->fun4( ); } 9、 #include int n; for(n=1;n<=5;n++) cout< int secret(int count) {int m,temp; 25
正在阅读:
面向对象复习11-13
WCS软件在自动仓储系统中的应用01-05
机械原理第八版课后练习答案(西工大版)05-20
管理学讲义习题答案06-08
我的神秘礼物作文500字06-20
小学作文《我的家乡》08-28
个人述职教学09-26
感恩老师作文400字06-23
高中一模翻译及答案精品资料03-15
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 复习
- 面向
- 对象