1、友元运算符obj1obj2被C++编译器解释为(A)。(2分)A.operator(obj1,obj2)B.(obj1,obj2)C.obj2.operator(obj1)D.obj1.operator(obj2)2.下列叙述正确的是(B)。classB{inta,b;public:B(intaa=0,intbb=0){a=aa;b=bb;}Boperator+(intx)//A{Br;r.a=a+x;r.b=b+x;returnr;}};voidmain(){Bx(3,5),y(8,4),z1,z2;z1=x+5;z2=10+y;//B}(2分)A.A行有错误B.B行有错误C.A行和B行都有错误D.A行和B行都没有错误3.有以下程序:voidFun(inti,intj){couti+jendl;//输出i+j}voidFun(inti){couti++endl;//输出i++}intmain()//主函数main(){inta=1;//定义变量iFun(a);//调用Fun()return0;//返回值0,返回操作系统}该程序执行后输出的结果是A。(2分)A.1B.2C.3D.44.虚函数支持多态调用,一个基类的指针可以指向派生类的对象,而且通过这样的指针调用虚函数时,被调用的是指针所指的实际对象的虚函数;而非虚函数不支持多态调用。有以下程序:classA{public:virtualvoidFun()const{coutA;}//输出信息voidShow()const{coutA;}//输出信息};classB:publicA{public:voidFun()const{coutB;}//输出信息voidShow()const{coutB;}//输出信息};intmain()//主函数main(){Bobj;//定义对象A*p=&obj;//指针p-Fun();//调用Fun()p-Show();//输出信息coutendl;//换行return0;//返回值0,返回操作系统}程序运行的输出结果是A。(2分)A.BAB.ABC.AAD.BB5.有以下程序:classA{private:doublea;//数据成员public:A(intm=0):a(m){}//构造函数//类型转换函数{return(int)a;}};intmain()//主函数main(){Aa=8.14;//定义对象coutaendl;//输出areturn0;//返回值0,返回操作系统}该程序输出为8,则横线处应填入C。(2分)A.intoperatorint()constB.int&operatorint()constC.operatorint()constD.operator(int&)const6.下面(B)的叙述不符合赋值兼容规则。(2分)A.派生类的对象可以赋值给基类的对象B.基类的对象可以赋值给派生类的对象C.派生类的对象可以初始化基类的引用D.派生类的对象的地址可以赋值给指向基类的指针7.下列函数原型声明中,错误的是C(2分)A.intfnction(intm,intn);B.intfunction(int,int);C.intfunction(intm=3,intn);D.intfunction(int&m,int&n);8.下列描述中,(D)是抽象类的特征。(2分)A.可以说明虚函数B.可以定义友元函数C.可以进行构造函数D.不能说明其对象9.对于虚函数定义的调用(D)。(2分)A.一定使用动态联编B.一定使用静态联编C.必须使用动态联编D.不一定使用动态联编10.以下(C)成员函数表示纯虚函数。(2分)A.virtualintvf(int);B.voidvf(int)=0;C.virtualvoidvf()=0;D.virtualvoidvf(int){}11.如果一个类至少有一个纯虚函数,那么就称该类为(A)。(2分)A.抽象类B.虚基类C.派生类D.以上都不对12.通过__A__调用虚函数时,采用动态绑定(binding)。(2分)A.对象指针B.对象名C.成员名限定D.派生类名13.下列关于动态联编的描述中,错误的是(C)。(2分)A.动态联编是函数联编的一种方式,它是在运行时来选择联编函数的B.动态联编又可称为动态多态性,它是C++语言中多态性的一种重要形式C.函数重载和运算符重载都属于动态联编D.动态联编只是用来选择虚函数的14.C++中类有两种用法,一种是类的实例化,即生成类对象,另一种是通过(B)派生出新的类(2分)A.复用B.继承C.重载D.封装15.抽象类(A)。(2分)A.不可以定义对象B.可以定义对象C.不可以派生新类D.不可以输出16.面向对象方法的多态性是指(C)。(2分)A.一个类可以派生出多个特殊类B.一个对象在不同的运行环境中可以有不同的变体C.针对一消息,不同的对象可以以适合自身的方式加以响应D.一个对象可以是由多个其他对象组合而成的1.(10分)面向对象程序设计上机练习(运算符重载)题目描述定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意。例如:c1+c2、i+c1、c1+i均合法。(其中i是整数,c1、c2是复数),编程实现求2个复数之和、整数与复数之和。输入描述输入有三行:第1行是第1个复数c1的实部和虚部,以空格分开。第2行是第2个复数c2的实部和虚部,以空格分开。第3行是1个整数i的值。输出描述要考虑虚部为正数、负数和0的不同情况下的输出。输出有三行:第1行是2个复数c1和c2的和,显示方式:实部+虚部i第2行是第1个复数c1加i的值,显示方式:实部+虚部i第3行是i加第1个复数c1的值,显示方式:实部+虚部i输入样例233510输出样例5+8i12+3i12+3i#includeiostream#includeiomanipusingnamespacestd;classcomplex{private:doublex,y;public:complex(doublea=0,doubleb=0){x=a;y=b;}complexoperator+(complex&c){complext;t.x=x+c.x;t.y=y+c.y;returnt;}complexoperator+(doublec){complext;t.x=x+c;t.y=y;returnt;}friendcomplexoperator+(doublex,complexc);friendostream&operator(ostream&out,complex&c){if(c.y0)outc.x+c.yi;elseif(c.y0)outc.x--c.yi;elseoutc.x;//+0i;returnout;}};complexoperator+(doublex,complexc){complext;t.x=x+c.x;t.y=c.y;returnt;}voidmain(){doublex,y;cinxy;complexc1(x,y);cinxy;complexc2(x,y),c3,c4;c3=c1+c2;cinx;c4=x+c1;coutc3endl;coutc4endl;coutc1+xendl;}2.(10分)Time类重载运算符题目描述设计一个时间类Time,要求:1、包含时(hour),分(minute),秒(second)私有数据成员;2、包含构造函数,重载关于一时间加上另一时间的加法运算符+、重载输出运算符、重载输入运算符。要求,定义完Time类后,main函数中声明对象time1,time2,time3,然后实现cintime1time2;time3=time1+time2;couttime3;输入描述输入时间一、时间二,注意:在main函数中必须用cin>>time1>>time2实现输入输出描述输出两个时间相加的结果,注意,在main函数中必须用cout<<time3实现输出输入样例12:30:592:30:01输出样例15:01:00#includeiostream#includeiomanipusingnamespacestd;classTime{private:inthour,minute,second;public:Timeoperator+(Time&t);friendistream&operator(istream&in,Time&t);friendostream&operator(ostream&,Time&);};istream&operator(istream&in,Time&t){int.hour;in.get();int.minute;in.get();int.second;returnin;}ostream&operator(ostream&out,Time&t){cout.width(2);cout.fill('0');outt.hour:;cout.width(2);coutt.minute:;cout.width(2);coutt.second;returnout;}TimeTime::operator+(Time&t){Timetmp;tmp.second=second+t.second;tmp.minute=minute+t.minute;tmp.hour=hour+t.hour;if(tmp.second=60){tmp.minute+=tmp.second/60;tmp.second=tmp.second%60;}if(tmp.minute=60){tmp.hour+=tmp.minute/60;tmp.minute=tmp.minute%60;}if(tmp.hour=24)tmp.hour%=24;returntmp;}voidmain(){Timetime1,time2,time3;cintime1time2;time3=time1+time2;couttime3;}3.(10分)复数类运算符重载题目描述定义一个复数类Complex,重载运算符*,,,使之能够用于复数的乘法、输入、输出。复数乘法公式(a+bi)(c+di)=(ac-bd)+(bc+ad)i.主函数定义如下:intmain(){Complexc1,c2,c3;cinc1c2;c3=c1*c2;coutc3;return0;}输入描述每行二个整数,表示复数的实部和虚部。输入二个复数,必须用cinc1c2;输出描述输出一个复数,输出时不要换行,必须用coutc3;输入样例2345输出样例-7+22i#includeiostreamusingnamespacestd;classcomplex{private:doublex,y;public:complexoperator*(complex&c){complext;t.x=x*c.x-y*c.y;t.y=x*c.y+y*c.x;returnt;}friendistream&operator(istream&in,complex&t);friendostream&operator(ostream&,complex&);};istream&operator(istream&in,complex&t){int.x;int.y;returnin;}ostream&operator(ostream&out,complex&t){if(t.y0)outt.x+t.yi;elseoutt.