C 、可以是void 类型D 、可以是float 类型A 、运算符重载可以改变运算符的操作数的个数B 、运算符重载可以改变优先级C 、运算符重载可以改变结合性D 、运算符重载不可以改变语法结构A 、动态联编是以虚函数为基础的B 、动态联编是在运行时确定所调用的函数代码的C 、动态联编调用函数操作是指向对象的指针或对象引用D 、动态联编是在编译时确定操作函数的A 、虚函数是一个静态成员函数B 、虚函数是一个非成员函数C 、虚函数既可以在函数说明时定义,也可以在函数实现时定义D 、派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型B 、重载函数和析构函数C 、虚函数和对象习题 10 运算符重载与多态性、单项选择题 A 、 ? : B 、 [ ] C 、 new D 、 &&2、 下列运算符不能用友元函数重载的是( )。
A 、 +B 、 =C 、 *D 、 <<3、 在一个类中可以对一个操作符进行( )重载。
A 、 1种B 、 2 种以下C 、 3 种以下D 、 多种4、友元运算符 obj1>obj2 被 C++ 编译器解释为( )。
1、下列运算符中,( )运算符在C++中不能重载。
A 、 operator > (obj1, obj2) B 、 > (obj1,obj2)C 、 obj2.operator > (obj1)D 、 obj1.operator >(obj2) 5、下列关于C++运算符函数的返回类型的描述中,错误的是()。
A 、可以是类类型B 、可以是int 类型 6、下列关于运算符重载的描述中,正确的是( )。
9、对虚函数的调用( )。
A、 定使用动态联编B 、必须使用动态联编 C、定使用静态联编D 、不一定使用动态联编10、编译时的多态性可以通过使用( )获得。
7、下列关于动态联编的描述中,错误的是()。
8、关于虚函数的描述中,正确的是()。
A 、虚函数和指针 D 、虚函数和引用13、在派生类中重新定义虚函数时,除了(的虚函数保持一致。
14、下面关于构造函数和析构函数的描述,错误的是( A 、析构函数中调用虚函数需用静态联编 B 、对虚析构函数的调用可以采用动态联编C 、当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数D 、构造函数可以声明为虚函数18、如果一个类至少有一个纯虚函数,那么就称该类为(A 、抽象类B 、虚基类11、实现运行时的多态性要使用( )。
A 、重载函数B 、构造函数C 、析构函数D 、虚函数12、要实现动态联编,必须通过( )调用虚函数。
A 、对象指针B 、成员名限定C 、对象名D 、派生类名A 、参数个数B 、参数类型C 、函数名称D 、函数体19、以下( )成员函数表示纯虚函数。
A 、 virtual int vf(int);B 、 voidvf(int)=0; C 、 virtual void vf ()=0; 20、下面的描述中.正确的是( D 、 virtual voidvf(int) { }A 、 virtual 可以用来声明虚函数)。
B 、含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C 、即使基类的构造函数没有参数派生类也必须建立构造函数D 、静态数据成员可以通过成员初始化列表来初始化二、分析下列各程序的运行结果1、源程序如下: #include<iostream>)方面,其他方面都必须与基类中相应)。
15、关于纯虚函数和抽象类的描述中,错误的是( )。
A 、纯虚函数是一种特殊的虚函数,它没有具体的实现B 、抽象类是指具有纯虚函数的类C 、一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类D 、抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出 16、下列描述中, ( )是抽象类的特性。
A 、可以说明虚函数B 、可以进行构造函数重载C 、可以定义友元函数D 、不能说明其对象17、()是一个在基类中说明的虚函数,它在该基类中没有定义但要求任何派生类都必须定义自己的版本。
A 、虚析构函数B 、虚构造函数C 、纯虚函数D 、静态成员函数)。
C 、派生类D 、以上都不对using namespace std;class Coord{public:Coord(int i=0,int j=0){ x=i; y=j; }void Print() { cout<<"x="<<x<<",y="<<y<<endl; }friend Coord operator ++ (Coord op);private:int x,y;};Coord operator ++(Coord op){++op.x;++op.y;return op;}int main(){Coord obj(1,2);obj.Print();++obj;obj.Print();return 0;}2、源程序如下:#include<iostream> using namespace std; classVector{ public: Vector(){} Vector(int i,intj){x=i;y=j;} friend Vector operator +=(Vectorv1,Vector v2); Vector operator -=(Vector v); void display(){cout<<"("<<x<<","<<y<<")"<<endl; private: int x,y;};Vector operator +=(Vector v1,Vector v2){v1.x+=v2.x;v1.y+=v2.y;return v1;}Vector Vector::operator -=(Vector v){Vector temp; temp.x=x-v.x; temp.y=y-v.y; return temp;}int main(){Vector v1(1,2),v2(3,4),v3,v4; v3=v1+=v2;v4=v1-=v2; cout<<"v1=";v1.display(); cout<<"v2=";v2.display(); cout<<"v3=";v3.display(); cout<<"v4=";v4.display();return 0;}3、源程序如下:#include<iostream.h>#include<string.h>#include<stdlib.h>class Sales{public:void Init(char n[]){ strcpy(name,n); int& operator [](int sub);char *GetName(){ return name; } private:char name[25];int divisionTotals[5];};int& Sales::operator [](int sub){ if(sub<0||sub>4){cerr<<"Bad subscript!"<<sub<<" is not allowed."<<endl; abort();}return divisionTotals[sub];}int main(){int totalSales=0,avgSales;Sales company; company.Init("Swiss Cheese");company[0]=123;company[1]=456;company[2]=789;company[3]=234;company[4]=567;cout<<"Here are the sales for "<<company.GetName()<<"'s division:"<<endl;for(int i=0;i<5;i++)cout<<company[i]<<"\t";for(i=0;i<5;i++) totalSales+=company[i];cout<<endl<<"The total sales are "<<totalSales<<endl;avgSales=totalSales/5;cout<<"The average sales are "<<avgSales<<endl; return 0;}4、源程序如下:#include<iostream.h>class base{ public:virtual void fun1(){ cout<<"base fun1."<<endl; virtual voidfun2(){ cout<<"base fun2."<<endl; void fun3(){ cout<<"base fun3."<<endl;void fun4(){ cout<<"base fun4."<<endl;};class derived:public base{virtual void fun1(){ cout<<"derived fun1."<<endl;virtual void fun2(int x){ cout<<"derived fun2."<<endl; virtual voidfun3(){ cout<<"derived fun3."<<endl; void fun4(){ cout<<"derivedfun4."<<endl; }};int main(){base *pb;derived d;pb=&d;pb->fun1();pb->fun2();pb->fun3();pb->fun4();return 0;}5、源程序如下:#in clude<iostream.h>class B0{public:virtual void dis play()=0;};class B1: public B0{public:void dis play(){ cout<<"B1::dis play()"<<e ndl;};class D1: public B1{public:void dis play(){ cout<<"D1::dis play()"<<e ndl;};void fun (B0 *ptr){p tr->dis play();}int mai n(){B0 *p;B1 b1;D1 d1;p=&b1;fun(p);p=& d1;fun(p);return 0;}三、程序填空(请将最合适的语句填入各标号处,使其成为一个完整、正确的程序1、下列程序定义了一实部为real,虚部为imag的复数类Complex,并在类中重载了复数的+、-操作。