1.下列运算符中,()运算符在C++中不能重载.
A.&& B.[] C.:: D.New 2.下列关于运算符重载的描述中,()是正确的.
A.运算符重载可以改变运算数的个数 B.运算符重载可以改变优先级 C.运算符重载可以改变结合性 D.运算符重载不能改变语法结构
3.如果表达式++i*k中的"++"和"*"都是重载的友元运算符,则采用运算符函数调用格式,该表
达式还可表示为().
A.Operator*(i.operator++().k) B.Operator*(operator+=(i),k) C.i.operator++().operator*(k) D.K.operator*(operator++(i)) 4.在下列成对的表达式中,运算符"+"的意义不相同的一对是().
A.5.0+2.0和5.0+2 B.5.0+2.0和5+2.0 C.5.0+2.0和5+2 D.5+2.0和5.0+2 5.下列关于运算符重载的叙述中,正确的是().
A.通过运算符重载,可以定义新的运算符 B.有的运算符只能作为成员函数重载
C.若重载运算符+,则相应的运算符函数名是+ D.重载一个二元运算符时,必须声明两个形参 6.已知在一个类体中包含如下函数原型:VOLUME operator-(VOLUME)const;下列关于这个函数的
叙述中,错误的是().
A.这是运算符-的重载运算符函数 B.这个函数所重载的运算符是一个一元运算符 C.这是一个成员函数 D.这个函数不改变类的任何数成员的值
7.在表达式X+Y*Z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符.下列
叙述中正确的是().
A.Operator+有两个参数,operator*有两个参数 B.Operator+有两个参数,operator*有一个参数 C.Operator+有一个参数,operator*有两个参数 D.Operator+有一个参数,operator*有一个参数 8.在C++程序中,对象之间的相互通信通过().
A.继承实现 B.调用成员函数实现 C.封装实现 D.函数重载实现 9.下面是重载为非成员函数的运算符函数原型,其中错误的是().
A.Franction operator+(franction,franction); B.Franction operator-(franction);
C.Franction&operator=(franction&,franction); D.Franction&operator+=(franction&,franction); 10.当一个类的某个函数被说明为virtual时,该函数在类的所偶派生类中(). A.都是虚函数 B.只有被重新说明时才是虚函数 C.只有被重新说明为virtual时才是虚函数 D.都不是虚函数
11.()是一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版
本.
A.虚析构函数 B.虚构造函数 C.纯虚函数 D.静态成员函数 12.以下基类中的成员函数,表示纯虚函数的是().
A.Virtual void vf(int); B.Void vf(int)=0; C.Virtual viod vf()=0 D.Virtual void yf(int){} 13.如果一个类至少有一个纯虚函数,那么就称该类为(). A.抽象类 B.虚基类 C.派生类 D.以上都不对 14.关于纯虚函数和抽象类的描述中,()是错误的. A.纯虚函数是一种特殊的虚函数,它没有具体的定义 B.抽象类是指具有纯虚函数的类
C.一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类 D.抽象类只能作为基类来使用,其纯虚函数的定义由派生类给出
15.下列描述中()是抽象类的特性.
A.可以说明虚函数 B.可以进行构造函数重载 C.可以定义友元函数 D.不能定义其对象 16.抽象类应含有().
A.至多一个虚函数 B.至少一个虚函数 C.至多一个纯虚函数 D.至少一个纯虚函数 17.类B是类A的公有派生类,类A和类B中都定义了虚函数func(),P是一个指向类A对象的指针,则
p->A::func()将().
A.调用类A中的函数func()
B.调用类B中的函数func()
C.根据P所指的对象类型而确定调用类A中或类B中的函数func() D.既调用类A中函数,也调用类B中的函数 18.在C++中,用于实现运行时多态性的时().
A.内联函数 B.重载函数 C.模板函数 D.虚函数 19.对于类定义: Class A { Public:
Virtual void func1( ) { } Void func2 ( ) { } };
Class B:public A { Public:
Void func1( ) { cout<<”class B func1”< A.A::func2( )和B::func1( )都是虚函数 B.A::func2( )和B::func1( )都不是虚函数 C.B::func1( )是虚函数,而A::func2( )不是虚函数 D.B::func1( )不是虚函数,而A::func2( )是虚函数 20.下列关于虚函数的说明中,正确的是(). A.从虚基类继承的函数都是虚函数 B.虚函数不得是静态成员函数,但可以是友元函数 C.只能通过指针或引用调用虚函数 D.抽象类中的成员函数都是虚函数 21.有如下程序: #include complex(double r,double i) : re(r),im(i) { } double real()const{return re;} double image()const{return im;} comples&operator+=(complex a){ re+=a.re; im+=a.im; return *this; } }; Ostream&operator<<(ostream& s,const Complex& z) { Return s<<‟(„< Complex x(1,-2),y(2,3); Cout<<(x+=y)< A.(1,-2) B.(2,3) C.(3,5) D.(3,1) 22.有如下程序: #include Void fun1() {cout<<”Base\\n”;} Virtual void fun2() {cout<<”Base\\n”;} }; Class Derived:public Base { Public: Void fun1() {cout<<”Derived\\n”;} Void fun2() {cout<<”Derived\\n”;} }; Void f (Base& ba) {b.fun1();b.fun2();} Void main() { Derived obj; F(obj); } 执行这个程序,输出结果是(). A.Base B.Base C.Derived D.Derived Base Derived Derived Base 二.简答题 1.在C++中,能否声明虚构造函数?为什么?能否声明虚析构造函数?为什么? 答:在C++中,不能定义虚构造函数,因为当开始调用构造函数时,对象还未完成实际例化,只有 在构造完成后,对象才能成为一个类的名副其实的对象;但析构函数可以是虚函数,而且通常声明为虚函数,即虚析构函数. 2.什么是抽象类?抽象类有何作用?可以声明抽象类的对象吗?为什么? 答:抽象类是一种特殊的类,是为了抽象的目的而建立的,建立抽象类,就是为了通过它多态地使用 其中的成员函数,为了一个类族提供统一的操作界面.抽象类处于类层次的上层,一个抽象类自身无法实例化,也就是说我们无法声明一个抽象类的对象,而只能通过继承机制,生成抽象类的非抽象派生类,然后再实例化. 3.什么时虚函数,空虚函数有何作用?定义虚函数有何? 答:虚函数是为实现某种功能而假设的函数,它是使用virtual关键字修饰的成员函数.空虚函数本身 不执行任何动作但可以保证建立一条从基类到派生类的虚函数路径,使派生类可以通过动态联编正确访问虚函数. 只有类的成员函数才可以是虚函数,静态成员不能是虚函数,构造函数不能是虚函数. 1. 多态性何虚函数有何作用? 答:虚函数(virtual function)允许函数调用与函数体之间的联系在运行时才建立,是实现动态联编的 基础.动态联编则在程序运行的过程中,根据指针与引用实际指向的目标调用对应的函数,也就是在程序运行时才决定如何动作.虚函数经过派生之后,可以在类族中实现运行时的多态,充分体现了面向对象程序设计的动态多态性. 2. 什么是纯虚函数?它有何作用? 答:纯虚函数(pure virtual function)是一个在基类中说明的虚函数,它在该基类中没有定义具体实现, 要求各派生类根据实际需要定义函数实现.纯虚函数的作用是为派生类提供一个一致的接口. 抽象类描述的是所有派生类的高度抽象的共性,这些高度抽象,无法具体化的共性就由纯虚函数 来描述.带由纯虚函数的类被为抽象类,一个抽象类至少具有一个纯虚函数. 三.程序填空 1.在下面程序横线处填上适当的内容,使其输出结果也0,56,56. #include ___(1)___func( ) {return 0;} }; Class derived:public base{ Public: Int a,b,c; ___(2)___setValue(int x,int y,int z) {a=x;b=y;c=z;} Int func( ) {return(a+b)*c;} }; Void main( ) { Base b; Derived d; Cout<cout< Cdreating B End of B End of A #include ___(1)___{cout<<”end of A”< B () {___(2)___} ~B() {cout<<”end of B”< A*pa=new B; Delete pa } 3.下列程序的 输出结果为2,请将程序补充完整. #include ____(1)___void fun( ) { cout<<1; } }; Class Derived : public Base { Public: }; Int main ( ) { Base *p=new Derived; P->fun( ); Delete p; Return 0; } 四.写运行结果 1.#include Using namespace std; Class A { Public: Virtual void func( ) { cout<<”func in class A “< Void func( ) { cout<<”func in class C”< 2.#include Using namespace std; Class A { Public: Virtual ~A ( ) { Cout<<”A::~A ( ) called “< B (int i) { buf=new char[i]; } Virtual ~B ( ) { Delete [] buf; Cout<<”B::~B( ) called”< Void main ( ) { A *a=new B(10); Fun(a); } 3.#include #include Friend ostream& operator <<(ostream&, FUN); } fun; Ostream& operator<<(ostream& os,FUN f) { Os.setf(ios::left); Return os; } Void main ( ) { cout< Using namespace std; 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”;} }; Void main ( ) { ONE aa,*p; TWO bb; THREE cc; P=&cc; p->f ( ) ; } 5.#include Using namespace std; Class couter{ Private: Unsigned value; Public: Counter ( ) {value=0;}; Counter (unsigned int a ) { value=a;}; Counter&operator++( ); Void display ( 0 ; }; Counter&counter::operator++ ( ) { Value++; Return *this; } Void counter ::display ( ) { Cout<<”Total is “< { counter i(0),n(10); i=++n; i.dispaly ( ); n.display ( ) ; i=n++; i.dispaly ( ); n.display ( ) ; } 五.编程题 1.重载运算符<<,使之能够使用cout将Date类对象的值以日期格式输出 2.定义一个Location类,重载运算符“+”和“-”,实现平面位置的移动 3.定义猫科动物Felid类,由其派生出猫类(Cat)和豹类(Leopard),二者都包含虚函数sound( ),要求根据派生类对象的不同调用各自重载后的成员函数. 4.定义一个shape抽象类,派生出Rectangle类和Circle类,计算各派生类对象的面积Area( ) 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo6.com 版权所有 湘ICP备2023023988号-11
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务