面向对象复习

更新时间:2023-11-13 20:54:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、程序填空

1、完成下面类的定义: #include #include class Person {public:

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 const double PI=3.14159; class Point { protected:

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 class Point { public:

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 class Complex {private:

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 void main( ) {

(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 #include class Point { protected:

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 class TDate {

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 #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 #include class Person {public:

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 const double PI=3.14159; class Point { protected: double x;

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 class Point { public:

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 #include void main() {long f1,f2; int i;

(1) ; for(i=1;i<=20;i++)

{cout<

7

(3) ;} }

14、此程序的功能是:构造一个类Box,含有3个数据成员,分别表示盒子的3条边长,还有一个成员函数,用来计算盒子的体积,请给程序填空。 #include class Box {private:

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 class figure {public:

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 class Vector {private: int x,y; public:

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 class Complex

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 void main( ) {

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 #include class Student {private: char *name; int num; float score; public:

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 class figure {public:

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 #include (13) T min(T a,T b)

{ (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 #include #define M 2 #define N 2 struct Person {

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 void main( ) {

int i,count=0;

for(i=100;i<=200;i++) {

if( (1) ) continue;

cout<

24、下面的类定义了拷贝构造函数,请完成该类的定义和实现。 #include class MyClass {

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 (7) class Point {private:

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 class coord {private: int x,y; public:

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 (16) #include void main()

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 void sum(int i) {

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 #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 class complex {

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 class base {

int X; public:

________________________________ // 为X置值 _________________________________ // 取X值 };

void main() {

base test; test.init(6);

cout<

34、设计可流的复数类,即要求在复数类中重载输入运算符“>>”和输出运算符“<<”。 #include class Complex {private:

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 class Box {private:

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 #include class Person {public:

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 const double PI=3.14159; class Point { protected: double x;

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 #include class matrix{ private: int a[2][3];

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 #include class Student { public:

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 class figure {public:

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 class Box {private:

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 void main() {

int a[]={1,3,5,7,9}; int *p=a;

cout<<*p<<*(p++)<<*(p+2)<

#include class X {char ch; public: X(char c) {ch=c; cout<<\ cout<

22

} };

void main() {X a(?a'); X b(?b'); X c(?c'); } 3、

#include class A {public:

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 class base1 {public:

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 void main()

{ int a[]={1,2,3,4,5,6},*p; for(p=&a[5];p>=a;p--) cout<<*p<<\ cout<

#include class Myclass {private: int x; public: Myclass() {x=0;

cout<<\ }

Myclass(int a)

{cout<

~Myclass()

{cout<

void main()

{ Myclass m1(20); Myclass m2; } 7、

#include class A {public:

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 class A {public:

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 secret(int); void main() {

int n;

for(n=1;n<=5;n++) cout<

int secret(int count) {int m,temp;

25

本文来源:https://www.bwwdw.com/article/gs4v.html

Top