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
VC考试题B及答案
VC++程序设计试题〔B〕一、单项选择〔每题分,10小题,共15分〕1.以下不属于面向对象程序设计的3大机制的是〔〕A.多态 C.重载 D.继承2、关于对象,以下说法中不正确的选项是〔〕A.对象是类的一个实例B. 一个类只能有一个对象C.任何一个对象只能属于一个类3、关于类的成员,以下正确的说法是〔〕C.数据成员和成员函数都可以为private public protect属性之一D.公有成员函数只能访问类的公有成员,私有成员函数只能访问类的私有成员4、要实现动态束定,必须通过〔〕调用虚函数。
A. 对象指针B.成员名限定C. 对象名D. 派生类名5、关于友元以下说法错误的选项是〔〕A.类的友元函数可以访问类的所有成员C.类A是类B的友元类,那么A的所有成员函数可访问B的任何成员6、MFC主要由〔〕组成A. 根底类库、全局函数B. 根底类库、全局变量、宏C.根底类库、宏D.根底类库、全局变量、全局函数、宏7、关于构造函数,以下说法不正确的选项是〔〕A.一个类中有且仅有一个构造函数B.构造函数在说明类变量时被自动执行C.构造函数没有返回值D.类中的构造函数的函数名与该类的类名必须同名8、程序对资源的调用主要是靠〔〕来识别。
A.资源名称9、在一个GDI对象使用完后,通常应当调用〔〕函数将其从设备描述符表别离出来,再将其删除,以免造成系统资源的浪费。
A. Attach()B.ReleaseDC()C.Detach()D.DeleteDC()10、使用GetWindowDC()和GetDC()获取的设备描述符表,在退出时必须调用〔〕来释放。
A.ReleaseDC()B.Delete()C.DeleteDC()D.Detach()二、判断题〔每题1分,10小题,共10分〕1.类实现了数据的封装。
〔〕2.一个类一定有构造函数和析构函数。
〔〕3.友元函数是类的成员函数。
〔〕4.析构函数可以重载。
〔〕5.析构函数没有返回值类型。
C++面向对象程序设计第9章 多态性与虚函数习题解答
第9章习题一、概念题1. 解答要点如下。
多态是指同样的消息被不同类型的对象接收时导致完全不同的行为,是对类的特定成员函数的再抽象。
C++支持的多态有多种类型,重载(包括函数重载和运算符重载)和虚函数是其中主要的方式。
2. 解答要点如下。
含有纯虚函数的类称为抽象类。
抽象类的主要作用是通过它为一个类族建立一个公共的接口,使它们能够更有效地发挥多态特性。
抽象类声明了一组派生类共同操作接口的通用语义,而接口的完整实现,即纯虚函数的函数体,要由派生类自己给出,抽象类只能作为基类被继承使用。
抽象类的派生类不一定要给出纯虚函数的实现,没有给出纯虚函数的实现的派生类仍然还是抽象类。
3. 解答要点如下。
在C++中不能声明虚构造函数。
多态是不同的对象对同一消息有不同的行为特性,虚函数作为运行过程中多态的基础,主要是针对对象的,而构造函数是在对象产生之前运行的,因此虚构造函数是没有童义的。
在C++中可以声明虚析构函数。
析构函数的功能是在该类对象消亡之前进行一些必要的清理工作,如果一个类的析构函数是虚函数,那么,由它派生而来的所有子类的析构函数也是虚函数。
析构函数设置为虚函数之后,在使用指针引用时可以动态联编,实现运行时的多态,保证使用基类的指针就能够调用适当的析构函数对不同的对象进行清理工作。
二、填空题1. 运行时2. 静态联编,动态联编3. public vehicle ,public vehicle4. 基类 A中的成员函数.派生类B中的成员函数.5. C类 B类6.抽象函数三、编程题1.#include<iostream.h>class Shape{public:virtual double GetArea()=0;};class Circle:public Shape{double radius;public:Circle(double r):radius(r){}double GetArea(){return 3.1416*radius*radius;}};class Square:public Rectangle{public:Square(double l):Rectangle(l,l){}};int main(){Rectangle r(3.5,4.0);Circle c(2.0);Square s(5.0);cout<<r.GetArea()<<endl;cout<<c.GetArea()<<endl;cout<<s.GetArea()<<endl;return 0;}2.#include <iostream.h>#include <string.h>class Computer{protected:char CPU[20],HDisk[20],Mem[20];public:Computer(char c[],char h[],char m[]){strcpy(CPU,c);strcpy(HDisk,h);strcpy(Mem,m);}virtual void Show(void){cout<<"CPU:"<<CPU<<'\t'<<"HDisk:"<<HDisk<<'\t'<<"Mem:"<<Mem<<endl;}};class PC:public Computer{private:char Display[20],Keyboard[20];public:PC(char c[],char h[],char m[],char d[],char k[]):Computer(c,h,m){strcpy(Display,d);strcpy(Keyboard,k);}void Show(void){cout<<"CPU:"<<CPU<<'\t'<<"HDisk:"<<HDisk<<'\t'<<"Mem:"<<Mem<<endl;cout<<"Display:"<<Display<<'\t'<<"Keyboard:"<<Keyboard<<endl;}};class NoteBook:public Computer{private:char LCD[20];public:NoteBook(char c[],char h[],char m[],char l[]):Computer(c,h,m){strcpy(LCD,l);}void Show(void){cout<<"CPU:"<<CPU<<'\t'<<"HDisk:"<<HDisk<<'\t'<<"Mem:"<<Mem<<endl;cout<<"LCD:"<<LCD<<endl;}};void main(void){PC pc("赛扬1G","Seagate40G","HY256MSDRAM","AOC15","美上美");NoteBook nb("P4/2G","金钻/80G(7200)","DDR/256M","飞利普107T/107F4");Computer *p;p=&pc;p->Show();p=&nb;p->Show();}3.class Computer{protected:char CPU[20],HDisk[20],Mem[20];public:Computer(char c[],char h[],char m[]){strcpy(CPU,c);strcpy(HDisk,h);strcpy(Mem,m);}virtual void Show(void)=0; };。
c++二级考试-习题B(含答案)
一、填空(每空2分,共20分)1.C++中ostream类的直接基类是__ios类____。
2.不同对象可以调用相同名称的函数,但可导致完全不同的行为的现象称为_多态性___。
3.定义虚函数所用的关键字是___virtual__。
4.将指向对象的指针作为函数参数,形参是对象指针,实参是对象的__地址值___。
5.作为语句的函数调用是通过___对函数的调用来执行函数体____来体现的。
6.执行if (x>=0||x<=0) cout<<"abcd";else cout<<"wxyz";屏幕上显示的是____abcd____。
7.设一维整型数组data已进行了初始化,则其元素个数可由操作符sizeof通过表达式____sizeof(data/data[0])___计算出来。
8.若一全局变量只允许本程序文件中的函数使用,则定义它时应加上修饰符____extern____。
9.设有int w[3][4];,pw是与数组名w等价的数组指针,则pw应初始化为_int(*pw)[4]=w;_。
10.要使引用pr代表变量char * p;,则pr应初始化为_char*&pr=p;_。
二、单项选择题(每空2分,共20分)1.对C++语言和C语言的兼容性,描述正确的是()A C++兼容CB C++部分兼容C C C++不兼容CD C兼容C++2.在C++中使用流进行输入输出,其中用于屏幕输出的对象是()A.cerr B.cin C.cout D.cfile3.下列()是正确的语句。
A ;B a=17C x+yD cout<<"\n"4.循环while(int i=0) i--;执行次数是()。
A 0B 1C 5D 无限5.设int f(int);和int g(int);是函数f和g的原形,以下将f作为语句调用的是()。
虚函数部分习题
Class Mammal
{
Public:
(1)void Speak(){cout<<”This is a Mammal!”<<endl;}
};
Class Dog:public Mammal
{
Public:
void Speak(){cout<<”this is a Dog!”<<endl;}
{
B b,*pb=&b;
A a,*pa=&a;
void (A::*paf1)()=A::f1;
void (A::*paf2)()=A::f2;
void (B::*pbf1)()=B::f1;
void (B::*pbf2)()=B::f2;
(pa->*paf1)();
pa=&b;
(pa->*paf1)();
pa->print(); pb->print();
delete pa;
}
5.下列程序中声明一个Mammal类,再由此派生出Dog类,二者都定义Speak()成员函数,基类中定义Speak()为虚函数。主程序中分别声明一个Mammal类和Dog类的对象,再分别 用对象名.函数名和指针的形式调用Speak()函数。请填空完成程序,并上机运行验证。
{
protected:
int k;
public:
XX ( int n = 5 ) : k (n){ }
~XX ( )
{cout<<“XX”;}
virtual void f ( ) ;
};
void XX :: f ( )
最新《C++程序设计案例教程》习题答案第9章 多态性和虚函数的使用
第9章多态性和虚函数的使用一、选择题1.C. 2.C 3.A 4.C 5. 6.D二、程序题(略)三、简答题1.C++多态性主要体现在哪两个方面?答:在C++中,多态性是指系统调用同名的函数,实现不同的功能。
多态性包含静态多态性和动态多态性。
静态多态性体现在编译时函数重载或者运算符重载上;展现了同一类中多个同名函数的处理机制。
而动态多态性是指程序运行过程中通过虚函数动态地确定针对的对象,展现继承层次结构中同名函数的处理机制。
2. 比较函数重载和虚函数在概念上和使用方式有什么区别。
函数重载是指函数名称相同,但是参数的个数或者参数的数据类型不同。
因此,系统调用重载函数时,会依据参数确定调用哪一个。
而在继承的机制中,基类的成员函数可能会与派生类新增的成员函数同名,包括参数个数和参数类型,这种现象不属于函数重载。
当基类的一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。
派生类可以对虚函数重新定义。
虚函数实现动态多态的问题。
3.比较抽象类、虚函数、纯虚函数的概念和使用上的区别。
虚函数通常在基类中定义,定义可以是空,派生类中可以对虚函数重写,也可以不写。
虚函数起到了接口的默认行为作用。
纯虚函数在基类中是没有定义的,必须在直接或者间接派生类中加以实现,它起到了接口的作用。
包含了纯虚函数的类,被称为抽象类。
抽象类不能建立对象。
4.谈谈虚基类和虚函数,区分两者不同的概念和各自的作用。
在继承机制中,一个派生类继承多个直接基类,而这些基类又有一个公共的基类,这个公共的基类成员在继承中可能产生多个拷贝。
虚基类的基本原则是在内存中只有基类成员的一份拷贝。
这样,通过把基类继承声明为虚拟的,就只能继承基类的一份拷贝,从而消除歧义。
用virtual限定符把基类继承说明为虚拟的。
虚函数指基类中成员函数声明为 virtual ,使它在一个或多个派生类中被重新定义,虚函数的作用是实现多态性。
虚函数必须是基类的非静态成员函数,其访问权限可以protected或public。
国家计算机二级(C++)89_真题(含答案与解析)-交互
国家计算机二级(C++)89(总分460, 做题时间120分钟)选择题(每小题2分,共70分) 下列各题四个选项中,有一个是正确的,请选择正确答案。
1.以下哪个基类中的成员函数表示纯虚函数?SSS_SINGLE_SELA virtual void vf(int)B void vf(int)=0C virtual void vf(=0)D virtual void yf(int){ }分值: 2答案:BC++中纯虚函数的定义与虚函数的关键字一样,在函数末尾要加上“=0”。
2.要想使23.78965421的输出为23.7887应用的语句是()。
SSS_SINGLE_SELA 一个子类的两个父类中都有某个同名成员,在子类中对该成员访问可能出现二义性B 解决二义性可以用对成员名的限定法C 父类和子类中同时出现同名函数,也可能存在二义性D 一个子类是从两个父类派生出来的,而这两个父类又有一个共同的父类,对该父类成员进行访问时,可能出现二义性分值: 2答案:C多线程不是同时执行几个事件,在某个时间上,计算机还是在执行一个事件,只是多线程将程序分为几个并行的子任务,由它们并发交叉执行。
在宏观上看,好像是同时执行几个事件。
3.数据库设计的根本目标是要解决______。
SSS_SINGLE_SELA 数据共享问题B 数据安全问题C 大量数据存储问题D 简化数据维护分值: 2答案:A由于数据的集成性使得数据可为多个应用所共享,特别是在网络发达的今天,数据库与网络的结合扩大了数据关系的应用范围。
数据的共享本身又可极大地减少数据冗余性,不仅减少了不必要的存储空间,更为重要的是可以避免数据的不一致性。
因此,数据库设计的根本目标是要解决数据共享问题。
4.已知枚举类型声明语句为: enum COLOR{WHITE,YELLOW,GREEN=5,RED,BLACK=10};则下列说法中错误的是SSS_SINGLE_SELA 枚举常量YELLOW的值为1B 枚举常量RED的值为6C 枚举常量BLACK的值为10D 枚举常量WHITE的值为1分值: 2答案:D枚举值是常量,不是变量。
C++程序设计基础第6章 虚函数与多态性
6.2.1 虚函数的定义
2. 虚函数的定义 • 虚函数的定义是在基类中进行的 。 • 虚函数的定义语法格式如下:
virtual<函数类型><函数名>(形参表) {
函数体 }
12
6.2.1 虚函数的定义
3. 定义虚函数时,要注意遵循以下规则: 1)只有成员函数才能声明为虚函数,因为虚
函数仅适用于有继承关系的类对象,所以 普通函数不能声明为虚函数。 2)虚函数的声明只能出现在类声明中的函数 原型声明中,而不能出现在成员的函数体 实现上。 3)类的静态成员函数不可以定义为虚函数, 因为静态成员函数不受限于某个对象。
}
7
void main()
{
MaxClass mc(34,67,143,89);
cout<<"计算前两个数中的最大数为:“
<<mc.max(34,67)<<endl;
cout<<"计算前三个数中的最大数为:“
<<mc.max(34,67,143)<<endl;
cout<<"计算四个数中的最大数为:“
运行结果: 张晓强,园林工人 李文卓,生命科学教师
23
6.2.3 虚函数的重载
• 2. 多继承中的虚函数
【例6.8】多继承中使用虚函数例题。
#include <iostream.h>
class base1
//定义基类base1
{
public: virtual void display()
//函数定义为虚函数
运行结果:
(1) : 动物(食草/食肉). (2) : 食草动物 : 羚羊 (3) : 食草动物 : 羚羊 (4) : 食肉动物 : 老虎 (5) : 食肉动物 : 老虎 (6) : 食草动物 : 羚羊 (7) : 食肉动物 : 老虎
C++习题3(继承和多态)
习题3一、选择题1.在C++中,类与类之间的继承关系具有( C )A)自反性B)对称性C)传递性D)反对称性2.在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( B )A)受限制B)保持不变C)受保护D)不受保护3.按解释中的要求在下列程序划线处填入的正确语句是:( C )#include <iostream.h>class Base{public:void fun(){cout<<"Base::fun"<<endl;}};class Derived:public Base{public:void fun(){ //在此空格处调用基类的函数fun()cout<<"Derived::fun"<<endl;}};A)fun();B)Base.fun();C)Base::fun();D)Base->fun();4.在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( C )A)受限制B)保持不变C)受保护D)不受保护5.在哪种派生方式中,派生类可以访问基类中的protected 成员(B )A)public和private B)public、protected和privateC)protected和private D)仅protected6.当一个派生类仅有protected继承一个基类时,基类中的所有公有成员成为派生类的(C)A) public成员B) private成员C) protected成员D) 友元7.不论派生类以何种方法继承基类,都不能使用基类的(B )A) public成员B) private成员C) protected成员D) public成员和protected成员8下面叙述错误的是(S )。
A)基类的protected成员在派生类中仍然是protected的B)基类的protected成员在public派生类中仍然是protected 的C)基类的protected成员在private派生类中是private的D)基类的protected成员不能被派生类的对象访问9.下列说法中错误的是(S )。
继承与虚函数习题
一、选择题1.在C++中,用于实现运行时多态性的是()。
A)内联函数B)重载函数C)模板函数D)虚函数2.如果一个类至少有一个纯虚函数,那么就称该类为()。
(a)抽象类(b)派生类(c)虚基类(d)以上都不对3.下列关于抽象类的说明中不正确的是()。
(a)含有纯虚函数的类称为抽象类(b)抽象类不能被实例化,但可声明抽象类的指针变量(c)抽象类的派生类可以实例化(d)纯虚函数可以被继承4.运行下列程序的输出结果为()。
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 derived二、填空题3.运行下列程序结果为_________________。
class one{public:virtual void f(){cout<<"1";}};class two:public one{public:two(){cout<<"2";}};class three:public two{public:virtual void f(){two::f();cout<<"3"; }};int main(){one aa,*p;two bb;three cc;p=&cc;p->f();return 0;}4.运行下列程序结果为_____________。
C++程序设计练习题与答案
精品文档C++g 序设计练习题一、填空题1.对象的三大基本特性分别为多态性、 ( ) 、封装性。
2.赋值运算符应重载为 ( ) 函数。
3.用 ( )声明的基类称为虚基类。
4.用 ()声明的函数称为虚函数。
5.派生类对基类继承控制访问有三种。
派生类可以定义其基类中不具备的 ()。
6.静态成员是对象的成员, ( )函数不是类的成员。
7.在函数体之前加 ()关键字可以防止覆盖函数改变数据成员的值。
8.一个 const 对象只能访问 ( ) 成员函数。
9.使用友元函数是为了提高程序效率,且节约了()开销。
10.类名为“ ClassName ”的类,其拷贝构造函数的原型说明是( )。
11.由关键字 private 、public 和 protected 限定成员的访问权限分别是 ()、()和()。
缺省关键字时成员的访问权限为 ()。
12. 如果想要公共基类在派生类中只有一个拷贝,就要将公共的基类说明为 默认构造函数,就必须在每一个派生类的构造函数中都要调用虚基类的(13.静态成员函数是使用关键字 ( )说明的成员函数。
14.一个函数的原型声明为“ void FunName(int=0, double=0, char='x'); ”,则调用 FunName 函数的方法 共有 ( )种。
15. 编译时多态性是通过 ()实现的;运行时多态性是通过 ( )实现的。
16.C++通过()实现编译时多态性,通过 ( )实现运行时多态性。
17•在C++中,声明类的关键字是( )。
18 .声明C++模板的关键字是( )。
19.调用函数原型声明为“ void FunName(short,int=0, float=1.0); ”的方法有 ( )种。
20. 处理 C+ +异常的方法:采用 ()结构。
21. 用关键字 ()、( )和( )限定的成员,其访问权限分别为:公有的、私有的和保护的。
缺省关键字时,成员的访问权限为 ()。
c++期末考试判断题+填空题
判断题1、对空指针不能用delete运算符。
(错误)2、对重载的函数,要求函数类型相同但参数不同。
(错误)3、任何一个对象只能属于一个具体的类。
(正确)4、用new运算符来创建对象时不会调用构造函数。
(错误)5、对重载的函数,要求参数不同或函数类型不同。
(错误)6、在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。
(错误)7、析构函数可以是虚函数。
(正确)8、无论什么方式的继承,基类的私有成员都不能被派生类访问。
(正确)9、要达到动态联编的效果,基类和派生类的对应函数不仅名字相同,而且返回类型、参数个数和类型也必须相同。
(正确)10、如果派生类没有实现虚函数,那么它将使用他的基类的虚函数。
(正确)11、构造函数可以是虚函数。
(错误)12、指向对象数组的指针不一定必须指向数组的首指针。
(正确)13、对象数组的元素可以是不同类的对象。
(错误)14、对象数组可以赋初值又可以赋值。
(错误)15、一个类的构造函数可以不包含对其子对象的初始化。
(错误)16、在C++中,既允许单继承,又允许多继承。
(正确)17、派生类从基类派生出来,它不能生成新的派生类。
(错误)18、派生类的继承方式只有2种:公有继承和私有继承。
(错误)19、在公有继承中,基类的成员在派生类中都可以直接使用。
(错误)20、在单继承中,派生类中对基类成员的访问也会出现二义性。
(错误)21、解决多继承下二义性问题的方法之一是使用作用域运算符。
(正确)22、作用域运算符(::)只能用来限定成员函数所属的类。
(错误)注:还限制成员变量所属的类。
23、析构函数是一种函数体为空的成员函数。
(错误)24、构造函数和析构函数都不能重载。
(错误)注:构造函数可以重载,析构函数不可以重载(因为析构函数无参数,不可能进行参数区分)。
25、说明或定义对象时,类名前面不需要加class关键字。
(正确)26、对象成员的表示与结构变量成员表示相同,使用运算符.或->。
- 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.实验五第三题。