c++多态性与虚函数习题答案
C++课后习题及其答案

练习题11.1 判断题×1.C++语言和C语言都是面向对象的程序设计语言。
√2.面向对象方法具有封装性、继承性和多态性。
√3.C语言是C++语言的一个子集。
C++语言继承了C语言。
×4.C++语言程序与C语言程序一样都是函数串。
×5.C++语言支持封装性和继承性,不支持多态性。
√6.C++语言比C语言对数据类型要求更加严格了。
√7.C++语言对C语言进行了一次改进,使得编程更加方便了。
×8.C++源程序在编译时可能出现错误信息,而在连接时不会出现错误信息。
√9.编译C++源程序时,出现了警告错(Warning)也可以生成可执行文件。
√10.C++语言程序的实现也要经过编辑、编译连接和运行3个步骤。
1.2 单选题1.下列关于面向对象概念的描述中,错误的是(C )。
A.面向对象方法比面向过程方法更加先进B.面向对象方法中使用了一些面向过程方法中没有的概念C.面向对象方法替代了结构化程序设计方法D.面向对象程序设计方法要使用面向对象的程序设计语言2.下列各种高级语言中,不是面向对象的程序设计语言是(D )。
A.C++ B.JavaC.VB D.C3.下列关于类的描述中,错误的是( A )。
A.类就是C语言中的结构类型B.类是创建对象的模板C.类是抽象数据类型的实现D.类是具有共同行为的若干对象的统一描述体4.下列关于对象的描述中,错误的是(C )。
A.对象是类的一个实例B.对象是属性和行为的封装体C.对象就是C语言中的结构变量D.对象是现实世界中客观存在的某种实体5.下列关于C++程序中使用提取符和插入符的输入/输出语句的描述中,错误的是(C )。
A.提取符是对右移运算符(>>)重载得到的B.插入符是对左移运算符(<<)重载得到的C.提取符和插入符都是双目运算符,它们要求有两个操作数D.提取符和插入符在输入/输出语句中不可以连用1.3 填空题1.C++语言具有面向对象方法中要求的三大特性:封装性、继承性和多态性。
C++面向对象程序设计第九章多态性与虚函数

13
【例9.1】虚函数的作用(改造例8.11)(P278)
class graduate:public undergraduate, public teacher // 从两个类继承 {public: void setinfo(int n, char* strname, char s, char* strfrom, float sc, float sa) { id = n; strcpy(name, strname); sex = s; strcpy(from, strfrom); score = sc; salary = sa; } graduate( ) { setinfo(1, "jetty", 'M', "china", 90, 1000); } void showinfo() { cout<<endl<<"ID: "<<id<<endl<<"name: "<<name <<endl<<"sex: "<<sex<<endl<<"from: "<<from <<endl<<"score: "<<score <<endl<<"salary: "<<salary; } };
8
9.3
纯虚函数与抽象类
被标明为不具体实现的虚成员函数为纯虚函数;其声明格式为: 被标明为不具体实现的虚成员函数为纯虚函数;其声明格式为: virtual 函数类型 函数名 参数表 ; 函数名(参数表 参数表)=0; 不能有实例对象的类即为抽象类,唯一的用途是被继承,一个抽 不能有实例对象的类即为抽象类,唯一的用途是被继承, 象类至少具有一个虚函数。 象类至少具有一个虚函数。 抽象类为抽象和设计的目的而建立, 抽象类为抽象和设计的目的而建立,将有关的数据和行为组织在 一个继承层次结构中,保证派生类具有要求的行为。 一个继承层次结构中,保证派生类具有要求的行为。对于暂时 无法实现的函数,可以声明为纯虚函数,留给派生类去实现。 无法实现的函数,可以声明为纯虚函数,留给派生类去实现。 派生类实现纯虚函数的参数要与父类纯虚函数声明的参数相同。 派生类实现纯虚函数的参数要与父类纯虚函数声明的参数相同。 抽象类不能定义对象,但可以声明抽象类的指针或引用。 抽象类不能定义对象,但可以声明抽象类的指针或引用。通过改 变指针或引用的具体地址,指向相应的派生类的对象, 变指针或引用的具体地址,指向相应的派生类的对象,以便实 现运行时的多态。 现运行时的多态。 派生类如果没有定义全部纯虚函数的操作,继承了部分纯虚函数, 派生类如果没有定义全部纯虚函数的操作,继承了部分纯虚函数, 则仍然是抽象类。 则仍然是抽象类。 【例9.3】纯虚函数和抽象类 】
多态性与虚函数习题

多态性与虚函数习题一、选择题1.在C++中,用于实现运行时多态性的是()。
A)内联函数B)重载函数C)模板函数D)虚函数2.如果一个类至少有一个纯虚函数,那么就称该类为()。
(a)抽象类 (b)派生类 (c)虚基类 (d)以上都不对3.为了区分一元运算符的前缀和后缀运算,在后缀运算符进行重载时,额外添加一个参数,其类型是()。
(a)void (b)char (c)int (d)float4.下列关于抽象类的说明中不正确的是()。
(a)含有纯虚函数的类称为抽象类(b)抽象类不能被实例化,但可声明抽象类的指针变量(c)抽象类的派生类可以实例化(d)纯虚函数可以被继承5.运行下列程序的输出结果为()。
#include<iostream.h>class base{public:void fun1(){cout<<"base"<<endl;}virtual void fun2(){cout<<"base"<<endl;}};class derived:public base{public:void fun1(){cout<<"derived"<<endl;}void fun2(){cout<<"derived"<<endl;}};void f(base &b){b.fun1();b.fun2();}int main(){derived obj;f(obj);return 0;}(a)base (b)base (c)derived (d)derivedBase derived base derived6.下面描述中,正确的是()。
A.virtual可以用来声明虚函数B.含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C.即使基类的构造函数没有参数,派生类也必须建立构造函数D.静态数据成员可以通过成员初始化列表来初始化7. 关于虚函数的描述中,正确的是()。
二级C++笔试353_真题(含答案与解析)-交互

二级C++笔试353(总分100, 做题时间90分钟)一、选择题下列各题A) 、B) 、C) 、D) 四个选项中,只有一个选项是正确的。
1.静态成员函数不能说明为SSS_SINGLE_SELA 整型函数B 常函数C 虚函数D 内联函数分值: 2答案:C[解析] 静态函数不能说明为虚函数。
2.以下程序的输出结果为main()int m=7,n=4;float a=38.4,b=6.4,x;x=m/2+n*a/b+1/2;cout<<x<<end1;}SSS_SINGLE_SELA 27.000000B 27.500000C 28.000000D 28.500000分值: 2答案:A[解析] 本题考查表达式值的类型由参与运算的所有变量的类型中优先级最高的变量类型所决定。
不过要注意的是整型向float型转换时.将丢失小数部分,即向下驭值。
3.关于虚函数的描述中正确的是SSS_SINGLE_SELA 虚函数是一个静态成员函数B 虚函数是一个非成员函数C 虚函数既可以在函数说明时定义,也可以在函数实现时定又D 派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型分值: 2答案:D[解析] 虚函数不能定义为静态函数;虚函数的作用在于继承,表现出动态性。
所以,在派生类中定义的虚函数必须和基类中对应的虚函数具有相同的参数个数和类型。
4.若有说明:int a [3][4];则对a数组元素的非法引用是SSS_SINGLE_SELA a[0][2*1]B a[1][3]C a[4-2][0]D a[0][4]分值: 2答案:D[解析] 在数组这部分的知识里面,数组下标越界是一个比较容易忽略的问题,其下标是从。
开始,至n-1为止,因此选项D是正确答案。
5.静态成员函数没有SSS_SINGLE_SELA 返回值B this指针C 指针参数D 返回类型分值: 2答案:B[解析] this指针是系统隐含的用于指向当前对象的指针。
C 程序设计与应用基础第五章 多态性习题答案

根据结果将程序补充完整。
#incude <iostream.h>
class Base
{
public:
Base(){cout<<"Base's cons."<<endl;}
___varitual ~Base()___{cout<<"Base's des."<endl;}
};
class Derived:public Base
第五章多态性
1、填空题
1)在一个成员函数内调用一个虚函数时,对该虚函数的调用进行___动态______联编。
2)动态联编是在__虚函数___的支持下实现的,它通过___指针和引用__来调用该函数操作。
3)下列程序的运行结果如下:
Base's cons.
Derived's cons.
Derived's des.
salesman s1;
employee *emp[4]={&m1,&t1,&sm1,&s1};
int i;
for(i=0;i<4;i++)
{
emp[i]->promote();
emp[i]->pay();
emp[i]->display();
}
}
2)编写一个程序,建立两种类型的表:队列与堆钱,使它们可以共用一个接口访问。
答案:
#include <iostream.h>
#include <string.h>
class employee
C++虚函数相关练习及答案分析

代码:
#include <iostream>
using namespace std;
class A
{
public:
A(){cout<<"调用A的构造函数"<<endl;A::func();}
virtual void func(){cout<<"A::func()"<<endl;}
~A(){cout<<"调用A的析构函数"<<endl;}
};
class D
{
public:
D(){cout<<"调用D的构造函数"<<endl;}
void func(){cout<<"D::func()"<<endl;}
~D(){cout<<"调用D的析构函数"<<endl;}
};
class B:public A
};
class B:public A
{
public:
B(){cout<<"调用B的构造函数"<<endl;B::func();}
void func(){cout<<"B::func()"<<endl;}
~B(){cout<<"调用B的析构函数"<<endl;}
D d;
};
class C:public B
~A(){cout<<"调用A的析构函数"<<endl;}
C++(练习)第9章,多态性与虚函数

B虚函数
C派生类
D其他都不对
参考答案
A
5.关于虚函数的描述中,()是正确的。
A虚函数是一个静态成员函数
B虚函数是一个非成员函数
C虚函数既可以在函数说明时定义,也可以在函数实现时定义
D派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型
参考答案
D
6.下面4个选项中,()是用来声明虚函数的。
C virtual void tt(int);
D virtual void tt(int){ };
参考答案
A
二.填空题
1.如果类包含了一个或多个__1__,则它是抽象类。
参考答案
1:纯虚函数
2.虚函数必须是类的__1__。
参考答案
1:非静态成员函数或成员函数
3.多态性分为两类:编译时的多态性和__1__的多态性。
参考答案
1:友元函数
7.如果在类中定义了一个成员函数为__1__,则表明在该继承层次链条的派生类中有可能重新定义这个成员函数的实现,即它可能被派生类的同名函数所覆盖。
参考答案
1:虚函数
8.动态多态性通过__1__实现。
参考答案
1:虚函数
9.定义一个函数名为fun,返回值为int,没有参数的纯虚函数的定义是__1__。
参考答案
1:引用或指针
20.含有纯虚函数的类称为__1__。
参考答案
1:抽象类
21.在C++中,编译时的多态性是通过函数重载和__1__体现的。
参考答案
1:模板
三.问答题
四.编程题
参考答案
1:纯虚函数
12.虚函数必须是类的__1__。
C 面向对象程序设计习题解答(全)

4答案 n=2,sum=2 n=3,sum=5 n=5,sum=10
5答案 x=3 6答案 x=1,y=2 x=30,y=40 7答案 1 2 3 4 exit main 3 2 1 8答案 n=100 9答案 the student is:Li Hu the teacher is:Wang Ping 10答案 2 11答案 1035,789.504 12答案 13答案
一、选择题 1 2 3 4 D B B C
类和对象的进一步解析
5 D 6 D 7 D B 8 C B 9 10 11 12 13 14 15 16 B D B A A C B A
17 18 19 20 21 22 23 24 C C D B A D 二、填空题 1 this 2所有成员 3友元类、友元函数 4 friend 5 程序编译、程序结束 三、程序阅读题
第六章 派生与继承
一、选择题 1(1) 1(2) 2 A B 3 4 5 6 7 8 9 10 11 D C C C D D B C A D
二、填空题 1 继承 2 具体化、抽象 3 公有继承、保护继承、私有继承 4 子对象 5 public(共有的)、protected(保护的)、不可访问 6 protected(保护的)、protected(保护的)、不可访问的 7 private(私有的)、private(私有的)、不可访问的 8 二义性 三、判断下列描述的正确性 1 2 3 4 5 6 7 8 9 10 11 12 13 √ × × × × × √ √ × × √ √ ×
1、 选择题 1 2 3 4 5 6 7 C 8 9 10 D D D C A D C 2、 程序阅读题 1答案 a=639,b=78,c=12 2答案 a=5,b=8 a=8,b=5 3答案 10 4答案 x=20.6 y=5 z=A x=216.34 y=5 z=A x=216.34 y=2 z=A x=216.34 y=2 z=E 5答案 ic=11 fc=7.82 ic=5 fc=2.15 3、 判断下列描述的正确性 1 2 √ × D A
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多态性与虚函数
1.概念填空题
1.1 C++支持两种多态性,分别是编译时和运行时。
1.2在编译时就确定的函数调用称为静态联编,它通过使用函数重载,模板等实现。
1.3在运行时才确定的函数调用称为动态联编,它通过虚函数来实现。
1.4虚函数的声明方法是在函数原型前加上关键字virtual。
在基类中含有虚函数,在派生类中的函数没有显式写出virtual关键字,系统依据以下规则判断派生类的这个函数是否是虚函数:该函数是否和基类的虚函数同名;是否与基类的虚函数参数个数相同、类型;是否与基类的虚函数相同返回类型。
如果满足上述3个条件,派生类的函数就是虚函数。
并且该函数覆盖基类的虚函数。
1.5 纯虚函数是一种特别的虚函数,它没有函数的函数体部分,也没有为函数的功能提供实现的代码,它的实现版本必须由派生类给出,因此纯虚函数不能是友元函数。
拥有纯虚函数的类就是抽象类类,这种类不能实例化。
如果纯虚函数没有被重载,则派生类将继承此纯虚函数,即该派生类也是抽象。
3.选择题
3.1在C++中,要实现动态联编,必须使用(D)调用虚函数。
A.类名
B.派生类指针
C.对象名
D.基类指针
3.2下列函数中,不能说明为虚函数的是(C)。
A.私有成员函数
B.公有成员函数
C.构造函数
D.析构函数
3.3在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值(A)。
A.相同
B.不同
C.相容
D.部分相同
3.4当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中(A)。
A.都是虚函数
B.只有被重新说明时才是虚函数
C.只有被重新说明为virtual时才是虚函数
D.都不是虚函数
3.5(C)是一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版本。
A.虚析构函数B.虚构造函数
C.纯虚函数D.静态成员函数
3.6 以下基类中的成员函数,哪个表示纯虚函数(C)。
A.virtual void vf(int);B.void vf(int)=0;
C.virtual void vf( )=0;D.virtual void vf(int){ }
3.7下列描述中,(D)是抽象类的特性。
A.可以说明虚函数
B.可以进行构造函数重载
C.可以定义友元函数
D.不能定义其对象
3.8类B是类A的公有派生类,类A和类B中都定义了虚函数func( ),p是一个指向类A对象的指针,则p->A::func( )将(A)。
A.调用类A中的函数func( )
B.调用类B中的函数func( )
C.根据p所指的对象类型而确定调用类A中或类B中的函数func( ) D.既调用类A中函数,也调用类B中的函数
编程题
1.实验八的第二题
2.定义一个Dog类。
要求其满足下述要求:该类包含等属性,以及对这些
属性操作的方法,并测试这个类。
(1) 要求有一个无参的构造函数,其初始的no、name、age值:1,金毛,
2。
(2) 要求有一个带参数的构造函数,其参数分别对应no、name、age。
(3) 要求用一个成员函数实现Dog的设置。
(4) 要求用一个成员函数实现输出Dog的信息。
(5) 要求用一个成员函数实现Dog信息的获取。
3.定义一个Dog 类,包含体重和年龄两个成员变量及相应的成员函数。
声
明一个实例dog1,体重为5,年龄为10,使用I/O 流把dog1 的状态写入磁盘文件。
再声明另一个实例dog2,通过读文件把dog1 的状态赋给dog2。
分别使用文本文件和二进制方式操作文件。
4.实验五第一题
5.实验五第二题
6.实验五第三题。