面向对象程序设计课后习题答案

发布时间 : 星期三 文章面向对象程序设计课后习题答案更新完毕开始阅读

cin>>eng; }

void print()

{ student::print(); stud::print();

cout<<\ cout<<\

cout<<\ }

void printname()

{ student::printname(); } private:

int math; int eng; };

class teacher:public person { public:

void input()

{ person::input();

cout<<\ cin>>degree;

cout<<\ cin>>dep; }

void print()

{ person::print();

cout<<\

cout<<\ }

void printname()

{ person::printname(); } private:

char degree[l],dep[l]; };

void main() { score c1; teacher t1;

cout<<\ c1.input();

cout<<\ t1.input();

cout<<\ c1.printname(); c1.print();

cout<<\ t1.printname(); t1.print(); }

[5_20] [5_21] (略)

第六章:多态性与虚函数

[6_1]答:所谓联编就是把函数名与函数体的程序代码连接(联系)在一起的过程。静态联编就是在编译阶段完成的联编。编译时的多态是通过静态联编来实现的。静态联编时,系统用实参与形参进行匹配,对于同名的重载函数便根据参数上的差异进行区分,然后进行联编,从而实现了多态性。

[6_2]答:动态联编是运行阶段完成的联编。运行时的多态是用动态联编实现的。即当程序调用到某一函数名时,才去寻找和连接其程序代码,对面向对象程序设计而言,就是当对象接收到某一消息时,才去寻找和连接相应的方法。

[6_3]答:编译时多态性主要是通过函数重载和运算符重载实现的。运行时多态性主要是通过虚函数来实现的。

[6_4]什么是虚函数?虚函数与函数重载有哪些相同与不同点?

虚函数就是在基类中被关键字virtual声明,并在派生类中重定义的函数。虚函数同派生类的结合可使C++支持运行时的多态性。

在一个派生类中重新定义基类的虚函数是函数重载的另一种形式,但它不同于一般的函数重载。普通的函数重载时,其函数的参数或参数类型必须有所不同,函数的返回类型也可以不同。但是,当重载一个虚函数时,页就是说在派生类中重新定义虚函数时,要求函数名、返回类型、参数个数、参数的类型和顺序与基类中的虚函数原型完全相同。如果仅仅返回类型不同,其余均相同,系统会给出错误信息;若仅仅函数名相同,而参数的个数、类型或顺序不同,系统将它作为普通的函数重载,这时将丢失函数的特性。

[6_5]答:纯虚函数是一个在基类中说明的虚函数,它在该基类中没有定义,但要求在它的派生类中必须定义自己的版本,或重新说明为纯虚函数。 纯虚函数的定义形式如下:

virtual 函数类型 函数名(参数表)=0;

如果一个类至少有一个纯虚函数,那么就称该类为抽象类。 [6_6]答:A 说明:C++规定构造函数不能是虚函数

[6_7] 答:D 说明:C++规定派生类中的虚函数的返回类型、参数个数、参数类型必须与虚函数的原型相同。

[6_8]答:C 说明:virtual show()=0;表示show是纯虚函数,但没指定是否带返回值,错误。Virtual show();未表明show是纯虚函数,错误。void show()=0 virtual;把virtual的位置写错了。

正确答案是virtual void show()=0; [6_9]题:不正确

因为虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数与参数类型的顺序,都必须与基类中的原型完全相同,而本程序段中虚函数在派生类中重定义时,参数个数与基类中的原型不相同。 [6_10]题:本程序的运行结果为: Stock class Stock class

Stock class 说明如下:

(1)指向Stock类的对象指针,也可以指向派生类对象。例如本程序中,指向Stock类型的指针ptr可以接受派生类对象f1的起始地址。 (2)语句ptr->print()均执行Stock::print(),而不执行Der1_Stock::print()或Der2_Stock::print(),这是因为基类和派生类定义的print()函数的返回值类型、参数类型和个数均相同,基类中定义的print()未声明成虚类型(virtual),这时的函数调用是在编译时静态联编的。 [6_11]题:将上例基类Stock中的print()函数前面加virtual就行了。 [6_12]题:程序实现如下: #include class car { public:

double distance; car(double f)

{ distance = f; }

virtual void travel_time()

{ cout<<\ cout<

class truck:public car { public:

truck(double f):car(f) { }

void travel_time()

{ cout<<\ cout<

{ car *p,car_time(150.0); truck truck_time(150); p=&car_time; p->travel_time(); p=&truck_time; p->travel_time(); return 0;

}

[6_13]题:程序如下: #include class currency { public:

void set_j(float j) { japan=j; } void set_e(float e) { europe=e; }

virtual void print_exchange()=0; protected:

float japan,europe; };

class ja:public currency { public:

void print_exchange()

{ cout<<\ cout<

class eur:public currency { public:

void print_exchange()

{ cout<<\ eur exchange $: \ cout<

{ currency *ptr[2]; ja j1; eur e1; ptr[0]=&j1;

ptr[0]->set_j(116.30); ptr[0]->print_exchange(); ptr[1]=&e1;

ptr[1]->set_e(1.1634); ptr[1]->print_exchange(); return 0; }

[6_14]题:程序如下: #include class currency { public:

void set_j(float j)

联系合同范文客服:xxxxx#qq.com(#替换为@)