文档库 最新最全的文档下载
当前位置:文档库 › C++面向对象技术复习题汇总

C++面向对象技术复习题汇总

面向对象程序设计C++ 复习资料与答案

第一、二、六、七章习题

一、选择题

1、系统约定C++源程序文件名的缺省的扩展名为()

A、bcc

B、c++

C、cpp

D、vcc

2、面向对象的程序设计将数据与()放在一起,作为一个相互依存、不可分割的整体来处理。

A、对数据的操作

B、信息

C、数据隐藏

D、数据抽象

3、当一个函数无返回值时,函数的类型应定义为()

A、void

B、任意

C、int

D、无

4、对于C++的函数,正确的叙述是:

A、函数的定义不能嵌套,但函数的调用可以嵌套

B、函数的定义不能嵌套,但函数的调用不能嵌套

C、函数的定义和调用都不能嵌套

D、函数的定义和调用都可以嵌套

5、下列语句中错误的是()

A、int *p=new int(10);

B、int *p=new int[10]

C、int *p=new int;

D、int *p=new int[40](0);

6、假设已经有定义:const char *const name=”chen”;,下面的语句中正确的是:()

A、name[3]=’a’; B、name=”lin”;

C、name=new char[5]; D、cout<

7、假设已经定义:char *const name=”chen”;, 下面的语句中正确的是:()

A、name[3]=’q’; B、name=”lin”;

C、name=new char[5]; D、name=new char(‘q’);

8、假设已经定义:const char *name=”chen”;, 下面的语句中错误的是:()

A、name[3]=’q’; B、name=”lin”;

C、name=new char[5]; D、name=new char(‘q’);

9、下面的类型声明中正确的是:( )

A、int &a[4];

B、int &*p;

C、int &&q

D、int i,*p=&i;

10、假设定义了函数模板()

template

T max(T x,T y){ return(x>y)?x:y;}

并定义了int i;char c;错误的调用语句是:()

A、max(i,i)

B、max(c,c)

C、max((int)c,i);

D、max(i,c)

11、模板的使用是为了()

A、提高代码的可重用性

B、提高代码的运行效率

C、加强类的封装性

D、实现多态性

12、设有二个语句:int x[‘a’];cin>>x;则编译器认为()

A、说明语句int x[‘a’]错

B、二个语句都错

C、语句cin>>x 错

D、二个语句正确,没有语法错

13、设有语句:void f(int a[10],int &x);int y[10],*py=y,n;则对函数f的正确调用语句是( )

A、f(py[10],n);

B、f(py,n)

C、f(*py,&n)

D、f(py,&n)

14、在C++中实现封装是借助于()

A、枚举

B、类

C、数组

D、函数

15、对于下面几个函数:

(1) void f(int x,float y) {…… }

(2) int f(int a,float b){…… }

(3) int f(int i,int j){…… }

(4) float k(int x){…… }

是重载函数。

A、4个全部

B、1和2

C、2和3

D、3和4

16、使用myFile.open(“Sales.dat”,ios::app);语句打开文件Sales.dat后,则()

A、使输出追加到文件尾部

B、打开一个文件进行读操作

C、打开一个文件进行读和写操作

D、文件以二进制方式打开,默认时为文本文件

二、填空题

1、面向对象的程序设计有四大特征,它们是抽象、封装、、。

2、结构体类型中的数据和成员函数默认类型为。

3、C++要求为每个函数建立原型,以说明函数的名称、参数的和,以及函数返回值。

4、在函数说明前加关键字“inline”,则该函数被声明为函数,其引入的目的是为了消除函数调用时的开销,以提高运行速度。

5、引用变量与被引用变量占有内存单元

6、运算符能够用于访问当前作用域内与局部变量同名的全局变量。

7、#include

using namespace std;

void s(int a,int &b){int t=a;a=b;b=t;}

int main(void)

{ int x=500,y=1000;

cout<

程序的第一行输出为,第二行输出为。

8、#include

using namespace std;

int main(void)

{ for(int a=1,b=1;a<=5;a++)

{ if(b>=8) break;

if(b%2==1){b+=7;continue;}

b-=3;

}

cout<<”a=”<

return 0;

}

程序输出结果是a= ,b= 。

9、#include

using namespace std;

int x=100;

int main(void)

{ int x=200;x+=::x; {int x=500;::x+=x;} cout<

10、#include

using namespace std;

void f(float x=5, int y=16, char z=…C?);

int main( )

{ float a=1.6; int b=2; char c='D';

f();f(a);f(a,b); f(a,b,c);

return 0;}

void f(float x, int y, char z)

{ cout<<“x=”<

程序的第二行输出为,第三行输出为。

11、以下程序的输出结果是。

#include

using namespace std;

char a[]=“ABCDEFGHI”;

char &f(int);

int main()

{ f(6)=…X?; cout<

char &f(int i)

{ return a[i]; }

12、如果C++程序中使用了:cout、strcpy,则必须在程序首部包含文件和。

13、#include

using namespace std;

#include

int main()

{ int i=7890; cout<

程序的第一行输出为,第二行输出为。

14、#include

using namespace std;

int main()

{ int i=100;cout.setf(ios::hex);

cout<

cout<

cout.setf(ios::dec);cout<

return 0;

}

以上程序运行的结果是

第三章类和对象

一、选择题

1、()不是构造函数的特征。

A、构造函数的函数名与类名相同;

B、构造函数可以重载;

C、构造函数可以设置缺省参数;

D、构造函数必须指定类型说明。

2、下列关于构造函数的描述中,()是正确的。

A、构造函数可以设置缺省参数;

B、构造函数可以被继承;

C、构造函数可以对静态数据成员进行初始化;

D、构造函数可以说明为虚函数;

3、()是析构函数的特征。

A、析构函数可以有一个或多个参数;

B、析构函数名与类名不同;

C、析构函数的定义只能在类体内;

D、一个类中只能定义一个析构函数;

4、定义析构函数时,应该注意()。

A、其函数名与类名完全相同;

B、函数返回类型是void类型;

C、无形参,也不可重载;

D、函数体中必须有delete语句;

5、下列静态数据成员的特性中,()是错误的。

A、说明静态数据成员时前边要加修饰符static;

B、静态数据成员要在类体外进行初始化;

C、静态数据成员不是所有对象所共用的;

D、引用静态数据成员时,要在其名称前加<类名>和作用域运算符;

6、友元的作用是()。

A、提高程序的运用效率;

B、加强类的封装性;

C、实现数据的隐藏性;

D、增加成员函数的种类;

7、关于成员函数特征的下列描述中,()是错误的。

A、成员函数一定是内联函数;

B、成员函数可以重载;

C、成员函数可以设置缺省参数值;

D、成员函数可以是静态的;

8、已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,()是正确的;

A、void print() const;

B、const void print();

C、void const print();

D、void print(const);

9、在()情况下适宜采用inline定义内联函数。

A、函数体含有循环语句;

B、函数体含有递归语句;

C、函数代码小,频繁调用;

D、函数代码多,不常调用;

10、假定AB为一个类,则执行“AB a(4) , b[3] , * p[2] ;”语句时,自动调用该类构

造函数的次数为( )。

A、 3

B、 4

C、 6

D、 9

11、通常拷贝初始化构造函数的参数是( )。

A、某个对象名

B、某个对象的成员名

C、某个对象的引用名

D、某个对象的指针名

12、有关类的说法不正确的是( )。

A、类是一种用户自定义的数据类型

B、只有类中的成员函数才能存取类中的私有数据

C、在类中,如果不作特别说明,所有的数据均为私有类型

D、在类中,如果不作特别说明,所有的成员函数均为公有类型

13、在声明类时,下面说法正确的的是( )。

A、可以在类的声明中给数据成员赋初值

B、数据成员的类型可以是register

C、public, private, protected这三种属性的成员可以按任意顺序出现

D、没有用public, private, protected定义的成员是公有成员

14、已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为

5,( )是正确的。

A、A1.p=5

B、A1->p=5

C、A1.*p=5

D、*A1.p=5

15、已知:类A中一个成员函数说明如下:

void Set(A&a); 其中,A&a的含义是( )。

A、指向类A的指针为a

B、将a的地址值赋给变量Set

C、a是类A的对象引用,用来作函数Set()的形参

D、变量A与a按位相与作为函数Set()的参数

16、下列说明中const char *ptr; ptr应该是( )。

A、指向字符型常量的指针

B、指向字符的常量指针

C、指向字符变量的指针

D、指向字符串的常量指针

17、采用函数重载的目的在于:

A、实现共享

B、减少空间

C、提高速度

D、使用方便,提高可读性

18、有关类和对象的说法下列不正确的是( )。

A、对象是类的一个实例

B、任何一个对象只能属于一个具体的类

C、一个类只能有一个对象

D、类与对象的关系和数据类型和变量的关系相似

19、有以下类的说明,请指出错误的地方()。

Class CSample

{

int a=2.5; A

CSample(); B

public:

CSample(int val); C

~CSample(); D

};

20、在类的定义形式中,数据成员、成员函数和( )组成了类定义体。

A、成员的访问控制信息

B、公有消息

C、私有消息

D、保护消息

二、填空题

1.通常的拷贝初始化构造函数的参数是_________________

2.在C++中函数参数的传递方式有三种,分别是:__________、__________和__________。3.任何类中允许有三种访问权限的数据,这三种访问权限分别是__________、__________和__________。

4.类中数据成员和成员函数的默认类型为______________

5.在类内部定义的__________和__________数据不能被不属于该类的成员函数来存取,定义为__________的数据,可以在类外部进行存取。

6.__________是一种特殊的成员函数,它主要用来为对象分配内存空间,对类的数据成员进行初始化并执行对象的其他内部管理操作。

7.一个类中有__________个析构函数。

8.__________成员函数中不能直接引用类中说明的非静态成员。

9.已知类Sample 中的一个成员函数说明如下:

void Set(Sample &a);

其中,Sample &a的含意是_________________

10.静态数据成员属于类,可以使用_______________ 的方式访问静态的数据成员。11.编译程序将this指针指向_____________。

12.以下程序的执行结果是__________。

#include

using namespace std;

class Sample

{ public:

Sample () { cout << “constructore” << endl; }

};

void fn (int i)

{ static Sample c;

cout << “i=” << i << endl;

}

int main ()

{ fn (10) ;

fn (20) ;

return 0;

}

13.以下程序的执行结果是_______________。

#include

using namespace std;

class sample

{ private:

int n;

static int k;

public:

sample(int i) { n=i; k++; };

void disp();

};

void sample:: disp ()

{ cout<<"n=" <

}

cout<

return 0;

}

15.以下程序的执行结果是_______________

#include

using namespace std;

class A

{ public:

A( ) {cout<<"Constructing A \n";}

~A( ) {cout<<"Destructing A \n";}

};

class B

{ public:

B( ) {cout<<"Constructing B \n";}

~B( ){cout<<"Destructing B \n";}

};

int main( )

{ A a;

B b;

return 0;

}

三、编程题

1. 定义一个圆类(Circle),属性为半径(radius)、圆周长和面积,操作为输入半径并计

算周长、面积,输出半径、周长和面积。要求定义构造函数(以半径为参数,缺省值为0,周长和面积在构造函数中生成)和拷贝构造函数。

2. 设计一个学校在册人员类(Person)。数据成员包括:身份证号(IdPerson),姓名(Name),

性别(Sex),生日(Birthday)和家庭住址(HomeAddress)。成员函数包括人员信息的录入和显示。还包括构造函数与拷贝构造函数。设计一个合适的初始值。

第四章派生类与继承

一、选择

1、从一个基类派生出的各个类的对象之间 (1) 。

A、共享所有数据成员,每个对象还包含基类的所有属性

B、共享部分数据成员,每个对象还包含基类的所有属性

C、不共享任何数据成员,但每个对象还包含基类的所有属性

D、共享部分数据成员和成员函数

2、 C++的继承性允许派生类继承基类的 (2) 。

A、部分特性,并允许增加新的特性或重定义基类的特性

B、部分特性,但不允许增加新的特性或重定义基类的特性

C、所有特性,并允许增加新的特性或重定义基类的特性

D、所有特性,但不允许增加新的特性或重定义基类的特性

3、对于公有继承,基类的公有和保护成员在派生类中将 (3) 成员。

A、全部变成公有

B、全部变成保护

C、全部变成私有

D、仍然相应保持为公有和保护

4、建立包含有类对象成员的派生类对象时,自动调用构造函数的执行顺序依次为 (4) 的构造函数。

A、自己所属类、对象成员所属类、基类

B、对象成员所属类、基类、自己所属类

C、基类、对象成员所属类、自己所属类

D、基类、自己所属类、对象成员所属类

5、派生类的对象对其基类中 (5) 可直接访问。

A、公有继承的公有成员

B、公有继承的私有成员

C、公有继承的保护成员

D、私有继承的以有成员

6、设类B是基类A的派生类,并有语句:A aa, * pa=&aa; B bb, * pb=&bb; 则正确

的语句是___(6)__ 。

A、pb=pa;

B、bb=aa;

C、aa=bb;

D、*pb=*pa;

7、在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是 _ (7)__.

A、派生类的对象可以赋给基类的对象

B、派生类的对象可以初始化基类的引用

C、派生类的对象可以直接访问基类中的成员

D、派生类的对象的地址可以赋给指向基类的指针

8、若类X和类Y的定义如下:

class X

{ int a,b;

public:

void fx ( );

};

class Y: public X

{ int c;

public:

void fy ( );

};

void Y::fy ( ) { c=a*b; }

则上述代码中, (8) 是非法的语句。

A、void fx();

B、k=a*b;

C、void fy();

D、int c;

9、如果一个派生类的基类不止一个,则这种继承称为__(9)__。

A、单继承

B、虚继承

C、多态继承

D、多重继承10.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:(10)。

A、 AB operator+(AB & a , AB & b)

B、 AB operator+(AB & a)

C、 operator+(AB a)

D、 AB & operator+( )

11、下面叙述不正确的是(11)。

A、派生类可以使用private派生

B、基类的public成员在派生类中仍然是public

C、对基类成员的访问必须是无二义性的

D、赋值兼容原则也适合多重继承的组合

12、下面叙述不正确的是(12)。

A、基类的protected成员在派生类中仍然是protected

B、基类的protected成员在public派生类中仍然是protected

C、基类的protected成员在private派生类中仍然是private

D、对基类成员的访问必须是无二义性的

13、下面叙述不正确的是(13)。

A、成员的访问能力在private派生类中和public派生类中仍是不同的

B、基类的private成员在public派生类中不可访问

C、赋值兼容规则不适合于多重继承的组合

D、public基类成员在protected派生中是protected

14、下面叙述正确的是(14)。

A、基类的对象可以赋给派生类

B、只要是基类的对象,都可以赋给由它派生的任一个派生类对象

C、只有该基类直接派生出来的类的对象才可以赋给该基类的对象

D、公有派生类的对象可以赋给基类的对象

15以下程序的输出结果为是(15)。

#include

using namespace std;

class A

{ public:

int n; };

class B:virtual public A{};

class C:virtual public A{};

class D:public B,public C

{ int getn(){return B::n;} };

int main()

{ D d; d.B::n=10; d.C::n=20;

cout<

return 0;

}

A、10,20

B、20,20

C、10,10

D、输出有二义性,不确定

二、填空题

1、在C++中派生类时,可以有 (1) 、 (2) 和 (3) 三种不同的方式。

2、公有派生类不能访问基类的 (4) 成员,但是派生类可以访问基类的 (5) 成员和 (6) 成员。

3、构造函数不能被继承,因此,派生类的构造函数必须通过调用(7)构造函数进行初始

化基类的对象。

4、保护派生具有双重作用:对(8),具有公有性,对其他外部,具有(9)。

5、在多重派生中,要使公共基类在派生类中只有一个拷贝,必须将该基类说明为 (10) 。

6、[程序]

#include

using namespace std;

class A{

private: int x;

public:

A(int x1)

{ x=x1;}

void print()

{cout<<"x="<

};

class B: private A{

private: int y;

public:

B(int x1,int y1):A(x1)

{ y=y1;}

A::print;

};

int main()

{ B b(20,10);

b.print();

return 0;

}

程序输出的结果为 (11) 。

7、[程序]

#include

using namespace std;

class A

{ public: A(int i,int j){a=i;b=j;}

void move (int x,int y) { a+=x;b+=y;}

void show(){ cout <<"("<

private: int a,b;

};

class B:private A

{ public: B(int i,int j,int k,int l):A(i,j) { x=k;y=l;}

void show() { cout<

void fun(){move(3,5);} void f1(){A::show();}

private: int x,y;

};

int main()

{ A e(1,2); e.show();

B d(3,4,5,6); d.show(); d.fun(); d.f1();

return 0;

}

程序输出的结果为 (12) , (13) , (14) 。

8、[程序]

#include

using namespace std;

class L{

protected:

int x;

public:L(int a){x=a;}

};

class X:public L{

public:

X(int a):L(a){};

int GetX(){return x;};

};

class Y:public L{

public:

Y(int a):L(a){};

int GetX(){return x;}

};

class Z:public X,public Y{

public:

Z(int a):X(a+10),Y(a+20){ };

};

int main(){ Z z(20);

cout<

}

L类成员int x ,Y类成员int GetX(){return x;}在Z类中,分别具有什么属性 (15) 和(16) ;程序输出结果的第一行是 (17) 。

9、以下程序输出第一行 (18) , 第二行 (19) 。

#include

using namespace std;

class A{

public:virtual void print(){cout<<"m"<<"n"<<"\n";} };

class B:public A{

public:void print(){cout<<"o"<<"p"<<"\n";}

};

class C:public A{

public:void print(int S=0){cout<<"s"<<"q"<<"\n";} };

int main()

{ B b;C c;

A *ap=&b; ap->print();

*ap=&c; ap->print();

return 0;

}

}

10、指出下面程序段的错误行,并说明原因 (20) 。

1 class base {

2 public: void pbase(){cout<<"base"<

3 };

4 class derive :private base

5 { public:void pderive(){cout<<"dervie"<

6 };

7 int main()

8 { base op1,*ptr;

9 deiver op2;

10 ptr=&op1;

11 ptr=&op2;

12 return 0;

13 }

11、指出下面程序段的错误行,并说明原因 (21) 。

#include

using namespace std;

1 class C {

2 public: void pbase(){cout<<"base"<

3 };

4 class D:public base

5 { public:void pderive(){cout<<"dervie"<

6 };

7 int main()

8 { C obj1;

9 D obj2, *ptr;

10 ptr=&obj1;

11 ptr=&obj2;

12 return 0;

13 }

12、指出下面程序段的错误行,并说明原因 (22) 。

#include

using namespace std;

1 class A {

2 public: void print1(){cout<<"A"<

3 };

4 class B:public A

5 { public:void print2(){cout<<"B"<

6 };

7 int main()

8 { A oo1,*ptr;

9 B oo2;

10ptr=&oo1;

11ptr->print1();

12ptr=&oo2;

13ptr->print1();

14ptr->print2();

15return 0;

16 }

三、编程题

1、在下面基类Areaclass的基础上建立两个派生类Box (方形类)与Isosceles(等腰三角形类),每个派生类包含一个函数Area(),分别用于返回方形和等腰三角形的面积,并声明对象,进行检验。

class Areaclass{

public:

Areaclass (double x=0, double y=0):height(x), width(y){ } protected:

double height, width;

};

2、定义一个类:圆,包含圆的半径;定义构造函数;计算圆的面积。

利用圆基类派生类:圆柱;定义构造函数;计算圆柱的体积。声明对象,并且检验计算功能。

第五章多态性

一、单选题

1、下列运算符中,______运算符在C++中不能重载。

A、? :

B、+

C、—

D、<=

2、下列运算符中,______运算符在C++中不能重载。

A、>

B、[ ]

C、::

D、<<

3、在C++中,通常重载运算符的成员函数称为______。

A、运算符函数

B、重载函数

C、函数重载运算符

D、以上都不对

4、下列函数中,______不能重载。

A、成员函数

B、非成员函数

C、析构函数

D、构造函数

5、系统在调用重载函数时,往往根据一些条件确定哪个重载函数被调用,在下列选项中,

不能作为依据的是______。

A、参数的个数

B、参数的类型

C、参数的顺序

D、函数的类型

6、下列对重载函数的描述中,______是错误的。

A、重载函数中不允许使用默认参数

B、重载函数中编译是根据参数表进行选择的

C、一般情况下,不要使用重载函数来描述毫无相干的函数

D、构造函数重载将会给初始化带来多种方式

7、下列关于运算符重载的描述中,______是正确的。

A、运算符重载可以改变运算符的个数

B、运算符重载可以改变优先级

C、运算符重载可以改变结合性

D、运算符重载不可以改变语法结构

8、要实现动态联编,派生类中的虚函数______。

A、参数个数必须与函数的原型相同,参数类型可以与函数的原型不同

B、参数类型必须与函数的原型相同,返回类型可以与函数的原型不同

C、参数个数、类型和顺序必须与函数的原型相同,返回类型必须与函数的原型相同

D、以上都对

9、关于虚函数的描述中,______是正确的。

A、虚函数是一个static类型的成员函数

B、虚函数是一个非成员函数

C、基类中说明了虚函数后,派生类中对其对应的函数可不必说明为虚函数

D、派生类的虚函数与基类的虚函数具有不同的参数个数和类型

10、______是一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版本。

A、虚析构函数

B、虚构造函数

C、纯虚函数

D、静态成员函数

11、对于以下类定义,下面正确的叙述是 ( )

class A

{ public:

virtual void func1( ){ }

void func2( ){ } };

class B:public A{ public:

void func1( ){cout<< ″ class B func 1 ″ <

virtual void func2( ){cout<< ″ class B func 2 ″ <

A、A::func2( ) 和B::func1( )都是虚函数

B、A::func2( ) 和 B::func1( ) 都不是虚函数

C、B::func1( ) 是虚函数,而 A::func2( ) 不是虚函数

D、B::func1( ) 不是虚函数,而 A::func2( ) 是虚函数

12、假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:。

A、AB operator+(AB & a , AB & b)

B、AB operator+(AB & a)

C、operator+(AB a)

D、AB & operator+( )

13、下面是对虚函数的的正确描述。

A、虚函数不能是友元函数

B、构造函数可以是虚函数

C、析构函数不可以是虚函数

D、虚函数可以静态成员函数

二、填空题

1、C++ 支持的两种多态性分别是_________多态性和________ 多态性。

2、静态编联通过和实现,动态编联通过和实现。

3、函数重载时,须符合相同和、、之一至少不同四个条件

4、运算符重载的两种方法:和。

5、以下程序的执行结果是________________。

#include

using namespace std;

static int dys[]={31,28,31,30,31,30,31,31,30,31,30,31};

class date

{ int mo,da,yr;

public:

date(int m,int d,int y){ mo=m; da=d; yr=y; }

date() { }

void disp()

{ cout<

date operator+(int day)

{ date dt=*this;

day+=dt.da;

while(day>dys[dt.mo-1])

{ day-=dys[dt.mo-1];

if(++dt.mo==13)

{ dt.mo=1;

dt.yr++;

}

}

dt.da=day;

return dt;

}

};

int main()

{ date d1(2,10,2001),d2;

d2=d1+20;

d2.disp();

return 0;

}

6、以下程序的执行结果是_______________。#include

using namespace std;

class base

{ public:

virtual void f1()

{ cout<<”f1 function of base”<

virtual void f2()

{ cout<<”f2 function of base”<

virtual void f3()

{ cout<<”f3 function of base”<

void f4()

{ cout<<”f4 function of base”<

class derive: public base

{ void f1()

{ cout<<”f1 function of derive”<

void f2(int x)

{ cout<<”f2 function of derive”<

void f4()

{ cout<<”f4 function of derive”<

int main()

{ base obj1, *p;

derive obj2;

p=&obj1;

p->f1(); p->f2(); p->f3();

p=&obj2;

p->f1(); p->f2(); p->f4();

return 0;

}

7、以下程序的执行结果是________________。#include

using namespace std;

class Sample

{ private:

int x;

public:

Sample(){ x=0; }

void disp()

{ cout<<”x=”<

void operator++(){ x+=10; }

};

int main()

{ Sample obj;

obj.disp();

obj++;

cout<<”执行obj++之后”<

obj.disp();

return 0;

}

8、以下程序的执行结果是_________________。#include

using namespace std;

class Point

{ public:

Point(){ x=0; y=0; }

Point(unsigned x, unsigned y)

{ Point::x=x;

Point::y=y;

}

unsigned getx(){ return x; }

unsigned gety(){ return y; }

void print()

{ cout<<”Point(“<

friend Point operator+(Point &pt, int nOffset);

friend Point operator+(int nOffset, Point &pt);

private:

unsigned x,y;

};

Point operator+(Point &pt, int nOffset)

{ Point ptemp=pt;

ptemp.x+=nOffset;

ptemp.y+=nOffset;

return ptemp;

}

Point operator+(int nOffset, Point &pt)

{ Point ptemp=pt;

ptemp.x+=nOffset;

ptemp.y+=nOffset;

return ptemp;

}

int main()

{ Point pt(10,20);

pt.print()

pt=pt+3;

pt.print();

pt=3+pt;

pt.print();

return 0;

}

9、下面程序意图把base 和derived 中的fun1,fun2函数说明为虚函数,从而利用base基类的指针实现动态联编,是否正确,请解释原因。

#include

using namespace std;

class base

{ public:

virtual int fun1(int a,int b,int c)=0;

float fun2(int d){ }

};

class derived:public base

{ public:

int fun1(int a,int b){ return 0; }

virtual float fun2(int d) {…}

};

三、编程题

定义一个表示三维空间坐标点的类,并对下列运算符重载。

(1)、<<:按 (x,y,z) 格式输出该点坐标(坐标为整型);

(2)、 > :如果A点到原点的距离大于B点到原点的距离,则A>B为真,否则为假。

相关文档
相关文档 最新文档