类和对象与运算符重载 - 答案
C++随堂测试(继承、多态、重载)(答案)

{ int getn(){return B::n;} };
void main()
{ D d; d.B::n=10; d.C::n=20;
cout<<d.B::n<<","<<d.C::n<<endl;
}
A、10,20 B、20,20 C、10,10 D、输出有二义性,不确定
18、采用函数重载的目的在于:(D )
A、实现共享B、减少空间
C、提高速度D、使用方便,提高可读性
19.若类X和类Y的定义如下:
class X
{ int a,b;
public:
void fx ( );
};
class Y: public X
{ int c;
public:
void fy ( );
};
void Y::fy ( ) { c=a*b; }
}
答案:
基类带参构造Βιβλιοθήκη 数9派生类带参构造函数9派生类析构
基类析构
一、编程题
1.设向量X=(x1,x2,…,xn)和Y=(y1,y2…,yn),它们之间的加、减分别定义为:
X+Y=(x1+y1,x2+y2,…,xn+yn)
X-Y=(x1-y1,x2-y2,…,xn-yn)
编程序定义向量类Vector ,重载运算符”+”、”-“、”=”,实现向量之间的加、减和赋值运算;用重载运算符”>>”、”<<”做向量的输入/输出操作。注意检测运算的合法性。
A.成员函数 B.构造函数 C.普通函数 D.友元函数
面向对象的程序设计语言――C++(第二版)-习题参考答案

面向对象的程序设计语言――C++(第二版)-习题参考答案课后习题答案以及代码习题参考答案第1章1.填空题C++语言概述(1)函数说明,函数体(2)声明区,主程序区,函数定义区(3)多态性(4)namespace,using(5)std(6)cin,(7)//(8)对数据的操作2.判断题(1)对(2)错(3)错(4)错(5)错3.改错题(1)没有函数体,应改为void main() {};(2)语句没有分号,应改为using namespace myspace;(3)cout和操作符共同完成输出的功能,应改为cout“ Input your name:";(4)应改为#include iostream.h4.简答题5.编程题(略)(略)第2章1.选择题基本数据类型、运算符与表达式(1)B (2)D (3)B (4)D (5)B课后习题答案以及代码2.简答题(1)(a)、(c)(e)、(f)、(g)、(h)、(i)(2)(a)、(g)、(i)、(j)(3)(a)5.5(b)0(c)20(d)0,0(e)1(f)1,2(g)3(h)-40(i)2(j)3(k)s1='0's1='9'(l)N!=03.读程序写结果(1)0,15(2)(1、1、1),(-1、-1、-1)(3)(a)a*a+2*a*b+b*b(b)4.0/3.0*3.__-__R*R*R(c)5.0/9.0*(F-32)(d)b=ab=c(4)364143(5)x=14.编程题(略)第3章1.选择题(1)B (2)A (3)A (4)C2.判断题(1)错(2)对(3)对(4)错3.读程序写结果(1)C++的控制语句5)A 5)错((课后习题答案以及代码12 23 3 34 4 4 45 5 5 5 5(2)11 2 11 2 3 2 11 2 3 4 3 2 11 2 3 4 5 4 3 2 1(3)j的值为0;i的值为2;4.编程题(略)第4章1.填空题函数(1)void(2)静态全局变量,static(3)函数重载(4)inline(5)递归函数(6)宏定义命令,文件包含命令,条件编译命令2.判断题(1)错(2)错(3)错(4)错(5)错(6)对(7)错(8)错(9)对(10)对3.读程序写结果(1)x=7,y=4x=9,y=5(2)34.56101(3)162228(4)12 15 18 21 24课后习题答案以及代码(5)2,1,4,1,3,2,1,4.简答题5.编程题(略)(略)第5章1.选择题构造数据类型(1)C (2)D (3)A (4)B (5)C 2.判断题(1)错(2)对(3)对(4)错(5)错3.读程序写结果(1)153(2)422 5 6 8 10(3)__,21(4)419(5)6904(6)43214.编程题(略)第6章1.填空题(1)类,对象,类(2)数据成员,成员函数(3)不能(4)private,protected,public,private (5)成员函数类和对象课后习题答案以及代码(6)friend(7)类名,作用域运算符(8)对象名.成员名,指针变量名-成员名,(*指针变量名).成员名(9)构造,析构,构造,析构(10)常量数据,引用数据(11)全局,数据类型,所属的类(12)常成员,只读(13)成员,友元(14)类数据成员,类成员函数(15)this(16)浅拷贝2.选择题(1)C (2)C (3)B (4)C (5)B(6)C (7)D (8)B (9)C (10)D(11)A (12)C (13)D (14)D (15)B3.改错题(1)man1.salary=1000.00; 不能在类外访问类的私有成员(2)float r=0;和float c=0; 类本身是抽象的,不能在类的定义体中给其数据成员赋值}后缺少分号“;”(3)成员函数void setdata(float x1,float y1,float r);没有实现(4)构造函数名point()应与类名同名,为Point没有头文件包含#include iostream.h4.读程序写结果题(1)x=0,y=0x=100,y=200(2)x=100,y=200x=1000,y=2022年t=3.14(3)Sta::fun2()=10s.fun2()=11r.a=20(4)Constructor1 called!x=0Constructor2 called!x=100Destructor called!Destructor called!(5)课后习题答案以及代码575.简答题6.编程题(略)(略)第7章1.填空题(1)继承(2)基类,派生类(3)private,protected,public,private (4)不可访问,保护,公有(5)私有(6)单(一),多(重)(7)赋值兼容规则(8)静态,动态(9)抽象类2.选择题继承和派生(1)B (2)A (3)B (4)C (5)B (6)A (7)D (8)B (9)B (10)B(11)D (12)B3.改错题(1)本题的错误主要是数据成员的访问权限问题:基类的私有成员在派生类中不可访问,如fb()函数中的a3=30;语句;类的私有和保护成员在类外不能访问,如main函数中的x.a2 =20;.a3=30; ,y.a2=200; ,y.a3=300; ,y.b2=2022年;和y.b3=3000;语句。
C++复习填空与判断题(参考答案)

二、填空题1. “面向对象”程序设计的三大基本特性是封装性、_____继承性________ 、多态性。
2、C++支持两种多态性:_____编译____时的多态性和____运行______时的多态性。
3.在函数体之前加 _____const____ 关键字可以防止覆盖函数改变数据成员的值。
4、对于类中定义的任何成员,其隐含访问权限为____private____。
5、若只需要通过一个成员函数读取数据成员的值,而不需要修改它,则应在函数头的后面加上___const_____关键字。
6. 如果new返回的指针丢失,则所分配的堆空间无法收回,称为 ___内存泄露__ 。
7、在继承机制下,当对象消亡时,编译系统先执行派生类的析构函数,然后才执行派生类中子对象类的析构函数,最后执行基类的析构函数。
8、假定用户为类AB定义了一个构造函数“AB(int aa):a(aa){}”,则____a______是该类的数据成员。
9. 假定用户没有给一个名为 car 的类定义析构函数,则系统自动给出的缺省析构函数定义为 _____~car(){}_________ 。
10. 访问一个指针所指向的对象的成员所用的运算符是 ___->______ 。
11、已知有定义“int x, a[]={5,7,9}, *pa=a;”,在执行“x=++*pa;”语句后,x的值是___6_____,*(pa+1)的值为____7____。
12.若希望用一个已有对象来构造另一个同类型的对象,可以使用拷贝构造函数来实现。
13、假定AB为一个类,则类定义体中的“AB(AB& x);”语句为该类_____拷贝构造函数_________的原型语句,而“operator=(AB& x);”为该类____赋值重载函数__________的原型语句。
14、为了访问某个类的私有数据成员,必须在该类中声明该类的友元。
15、静态成员是局部于类的成员,它提供一种同类对象的__ 共享 __机制。
2021年C++II习题及其解答(第1版)

*欧阳光明*创编 2021.03.07*欧阳光明*创编 2021.03.07 习题及其解答欧阳光明(2021.03.07)第5章 类与对象5.1 选择题第7章 1. 在下列结构变量的定义中,不正确的是(d )。
第8章 (a) struct employee {char name[20]; long code; }emp;(b) struct{char name[20];longcode;}emp;(c) struct employee{charname[20];long code;} ;employee emp;(d) struct{char name[20];long code;}employee;employee emp;2.已知有职工情况结构变量emp定义为:struct employee{char name[20];long code;struct{int year;int month;int day;}birth;}emp;下列对 emp 的 birth正确赋值方法是( d )。
(a) year=1980;month=5;day=1;(b) birth.year=1980;birth.month=5;birth.day=1;(c) emp.year=1980;emp.month=5;emp.day=1;(d) emp.birth.year=1980;emp.birth.month=5;emp.birth.day=1;3.假定有以下声明和定义,则下面引用形式错误的是( b )。
struct student{int num;float score;} stu[3] = {{1001,80},{1002,75},{1003,91}}, *p = stu ;(a) p->num(b)(p++).num (c) (p++)->num(d)(*p).num4.下列四个运算符中,优先级最低的是( a )。
面向对象程序设计期末复习题及答案1

C++面向对象程序设计复习试题类型1、单项选择题(在每小题的四个备4.在进行完任何C++流的操作后,都可以用C++ 流的有关成员函数检测流的状态;其中只能用于检测输入流是否结束状态的操作函数名称是选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。
15 题,每小题2 分,共30 分) [主要从作业题目中抽出来]答案:eof 5.函数重载是指____________ 。
答案:两个或两个以上的函数取相同的函数名,但形参的个数或类型不同3 题,每小题5 分,共15 分)程序编制题【也称综合分析题】每题8 分,第3题9分,共25 分)容打*号是重点,打▲号是编程题出题范围*基本概念,对象,消息,类。
面向对象系统特性,封装性,继承性,多态性。
*▲ C++ 类的构成,类与对象,构造与析构,动态存储,类嵌套。
静态成员,对象数组,友元。
*函数重载。
运算符重载。
*引用定义与引用参数*基类与派生类的定义。
*基类及派生类的访问权(含派生类对基类的访问、通过派生类对象对基类的访问)和初始化。
多继承与虚基类。
*多态性与虚函数。
纯虚函数、抽象类。
* ▲函数模板。
* ▲使用类来定义对象并在程序中的应用样题填空题1. 假定AB 为一个类,则执行“ a[10]; ”语句时,系统自动调用该类的构造函数的次数为。
答案:102. 可以用p.a 的形式访问派生类对象P 的基类成员a, 其中a 是__________________ 。
答案:公有继承的公有成员阅读程序例题【计算题】1.分析以下程序的执行结果#include<iostream.h>class Sample{int x,y;public:Sample() {x=y=0;}Sample(int a,int b) {x=a;y=b;}~Sample(){if(x==y)cout<< “x=y” <<endl;elsecout<< “ x!=y ”<<endl;}void disp(){cout<< “x=” <<x<<“,y ” =<<y<<endl;}};void main(){Sample s1,s2(2,3);s1.disp();s2.disp();}解:x=0,y=0 x=2,y=3 x!=y x=y2.分析以下程序的执行结果#include<iostream.h> int add(int x,int y){return x+y;2. 填空题。
(完整版)c++面向对象程序设计试题和答案

系名___ ___ ___ ___班级___ ___ ___ ___姓名___ ___ ___ ___学号___ ___ ___ ___ 密封线内不答题填空题(每空1分,共14分)1、观看以下程序:class point{public:void show() {cout<<”point”<<endl;}};void main(){point p1;point *p;p=&p1;_P1.show()______________//通过对象p1访问show函数__p->show()____________//通过指针p访问show函数}2、在C++类中可以包含__私有____________、___公有___________和__保护____________三种具有不同访问控制权的成员。
3、定义类时,在类头中将使用关键字___class__________来表示类定义的开始。
4、如果一个类中至少有一个纯虚函数,则该类称为_____抽象类___________。
5、C++类的组成包括数据成员和___成员函数___________,友元_不是____(是、不是)该类的成员函数。
6、友员函数是用关键字____friend________修饰的非成员函数。
7、若有:int i;int &j=i;i=10;j=i+1;则i=__11________,j=_11_________。
8、 new的功能是_____动态申请内存空间_______________,delete的功能是___释放由new申请的空间_________________。
二、选择题(每小题1.5分,共30分)1、下列特性中不是面向对象程序设计语言所特有的是()。
(A)数据封装(B)继承(C)多态性(D)模板2、()是给变量取一个别名,它引入了变量的同意词。
(A)指针(B)引用(C)枚举(D)结构3、类成员的访问权限中,()只能被本类的成员函数和其友元函数访问。
C++运算符重载题库及答案

运算符重载一.单项选择题1.下列运算符中,运算符在C++中不能重载。
A.?:B.+C.D.<=解:C++中不能被重载的运算符有:·,一,::,?:。
本题答案为A。
2.下列运算符中,运算符在C++中不能重载。
A.&&B.[]C.::D.new解:c++中不能被重载的运算符有:·,·+,::,?:。
本题答案为c。
3.下列关于运算符重载的描述中,是正确的。
A.运算符重载可以改变操作数的个数B.运算符重载可以改变优先级C.运算符重载可以改变结合性D.运算符重载不可以改变语法结构解:运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算程的语法结构。
本题答案为D。
4.友元运算符objl>obj2被C++编译器解释为。
A.operator>(objl,obj2) B.>(obj1,obj2)C.obj2.operator:>(obj1) D.objl.operator>(obj2)解:重载为友元函数的运算符的调用形式如下:operator<运算符>(<参数,<参数2>)等价于:<参数1><运算符><参数2>本题答案为A。
5.现需要对list类对象使用的逻辑运算符“==”重载,以下函数声明是正确的。
A、list&list::operator==(const list&a) ;B、list list::operator==(const list&a) ;C、bool&list::operator==(const list&a);D、bool list::operator==(const list&a);6.以下类中分别说明了“+=”和“++”运算符重载函数的原型。
如果主函数中有定义:fun m,c,d;,那么,执行语句c=m++;时,编译器把m++解释为:(3)A)c.o p e r a t o r++(m);B)m=o p e r a t o r++(m);C)m.o p e r a t o r++(m);D)o p e r a t o r++(m);class fun{public:....f u n o p e r a t o r+=(f u n);f r i e n d f u n o p e r a t o r++(f u n&,i n t);};答案:D7.在第33题中,当执行语句d+=m;时,C++编译器对语句作如下解释:(34)A.d=operator+=(m);B.m=operator+=(d);C. d.operator+=(m);D.m.operator+=(d);答案:C8.设有以下类定义,其中说明了“+”运算符重载函数的原型。
实验七-运算符重载参考答案

实验七-运算符重载参考答案实验七多态性—函数与运算符重载7.1 实验目的1.理解掌握成员函数方式运算符重载;2.理解掌握友元函数方式运算符重载;3.理解掌握++、--运算符的重载。
7.2 实验内容7.2.1程序阅读1.理解下面的程序,并运行查看结果,回答程序后面的问题。
#include <iostream>using namespace std;class CComplex{public:CComplex(){real = 0;imag = 0;}CComplex(int x,int y){real = x;imag = y;}int real;int imag;CComplex operator + (CComplex obj1)//---------------------------------------------①{CComplex obj2(real - obj1.real, imag - obj1.imag);return obj2;}};int main(){CComplex obj1(100,30);CComplex obj2(20, 30);CComplex obj;obj = obj1+obj2; //------------------------------------------------------------------②cout << obj.real <<endl;cout << obj.imag << endl;return 0;}问题一:①处的运算符重载,为什么该函数的返回值要设计成CComplex类型?答:因为在函数中return obj2,obj2是CComplex 类型,所以函数返回值要与return返回的类型相同,即设计成CComplex类型。
问题二:②处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,但是为什么CComplex类中的运算符重载函数只设计了一个参数?答:因为成员函数经编译后会产生this指针,this指针会指向调用该函数的obj1对象,该obj1对象就是就相当于函数的第一个参数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
选择题1、若有以下说明,在类外使用对象objx成员的正确语句是()。
class X{ int a;void fun1();public:void fun2();};A objx.a=0B objx.fun1();C objx.fun2();D X::fun1();2、若有以下说明,对n的正确访问语句是()。
class Y{ //………;public:static int n;};int Y::n=0;Y objy;A n=1;B Y::n=1;C objy::n=1;D Y->n=1;3、若有以下类Z的说明,函数fstatic的正确定义是()。
class Z{ int a;public:void fstatic(Z &)static;};A void Z::fstatic(Z &objz){objz.a=0;}B void Z::fs tatic(Z &objz){a=objz.a;}C void Z::fstatic(Z &objz){a=0;}D void Z::fstatic(Z &objz){Z::a=0;}4、若有以下类T的说明,函数ffriend的错误定义是()。
class T{ int i;friend void ffriend(T &,int);};A void ffriend(T &objt,int k){objt.i=k;}B void ffriend(T &objt,int k){k=objt.i;}C void T::ffriend(T &objt,int k){K+=objt.i;}D void ffriend(T &objt,int k){objt.i+=k;}5、在类定义的外部,可以被访问的成员有()。
A 所有类成员B 私有或保护类成员C公有的类成员 D 公有或私有的类成员6、关于this指针的说法正确的是()。
A this指针必须显式说明B 定义一个类后,this指针就指向该类C成员函数拥有this指针 D 静态成员函数拥有this指针7、说明一个类的对象时,系统自动调用();撤销对象时,系统自动调用()。
A 成员函数B构造函数C析构函数 D 友元函数8、下面对构造函数的不正确描述是()。
A 系统提供默认的构造函数B构造函数可以有参数,所以也可以有返回值C 构造函数可以重载D 构造函数可以设置默认参数9、下面对析构函数的正确描述是()。
A 系统不提供默认的析构函数B 析构函数必须由用户定义C析构函数没有参数,也没有返回值 D 析构函数可以设置默认参数10、关于类的静态成员的不正确描述是()。
A 静态成员不属于对象B静态数据成员要在类外定义和初始化C 静态成员函数不拥有this指针,需要通过类参数访问对象成员D 只有静态成员函数可以操作静态数据成员11、下面的选项中,()不是类的成员函数。
A 构造函数B 析构函数C友元函数 D 复制构造函数12、下面对友元的错误描述是()。
A 关键字friend用于声明友元B 一个类中的成员函数可以是另一个类的友元C 友元函数访问对象的成员不受访问特性影响D友元函数通过this指针访问对象成员13、下列关于运算符重载的描述中,()是正确的。
A 可以改变参与运算的操作数的个数B 可以改变运算符原来的优先级C 可以改变运算符原来的结合性D不能改变原运算符的语义14、下列函数中,不能重载运算符的函数是()。
A成员函数 B 构造函数 C 普通函数 D 友元函数15、下面关于类型转换的描述中,错误的是()。
A 构造函数可以把一种类类型对象转换成另一种类类型对象B构造函数可以把一种类类型对象转换成基本类型对象C 类型转换函数可以把类类型对象转换为其他指定类型对象D 类型转换函数只能定义为一个类的成员函数,不能定义为类的友元函数。
阅读下列程序,写出执行结果1、class A{ public:int f1();int f2();void stex(int m){x=m; cout<<x<<endl;}void stey(int n){y=n; cout<<y<<endl;}int getx(){return x;}int gety(){return y;}private:int x,y;};int A::f1(){return x+y;}int A::f2(){return x-y;}void main(){ A a;a.setx(10); a.sety(5);cout<<a.getx()<<’\t’<<a.gety()<<endl;cout<<a.f1()<<’\t’<<a.f2()<<endl;}运行结果:10510 515 5Press any key to continue2、class T{ public:T(int x,int y){ a=x; b=y;cout<<“调用构造函数1!”<<endl;cout<<a<<’\t’<<b<<endl;}T(T &d){ cout<<“调用构造函数2!”<<endl;cout<<d.a<<’\t’<<d.b<<endl;}~T(){cout<<“调用析构函数!”<<endl;}int add(int x, int y=10){return x+y;}private:int a,b;};void main(){ T d1(4,8);T d2(d1);cout<<d2.add(10)<<endl;}运行结果:调用构造函数1!4 8调用构造函数2!4 820调用析构函数!调用析构函数!Press any key to continue3、class T{ public:T(int x){a=x;b+=x;}static void display(T c){ cout<<”a=”<<c.a<<’\t’<<”b=”<<c.b<<endl;} private:int a;static int b;};int T::b=5;void main(){ T A(3),B(5);T::display(A);T::display(B);}运行结果:a=3 b=13a=5 b=13Press any key to continue4、class A{ public:A(){a=5;}void printa(){cout<<”A::a=”<<a<<endl;} private:int a;friend class B;};class B{ public:void display1(A t){ t.a++; cout<<”display1:a=”<<t.a<<endl;}void display2(A t){ t.a--; cout<<”display2:a=”<<t.a<<endl;} };void main(){ A obj1;B obj2;obj1.printa();obj2.display1(obj1);obj2.display2(obj1);obj1.printa();}运行结果:A::a=5display1:a=6display2:a=4A::a=5Press any key to continue5、class T{ public:T( ){a=0;b=0;c=0;}T(int i,int j,int k):a(i),b(j),c(k){}void get(int &i, int &j, int &k){ i=a; j=b; k=c;}T operator*(T obj){ T temp;temp.a=a*obj.a;temp.b=b*obj.b;temp.c=c*obj.c;return temp;}private:int a,b,c;};void main(){ T obj1(1,2,3),obj2(5,5,5),obj3;int a,b,c;obj3=obj1*obj2;obj3.get(a,b,c);cout<<”(obj1*obj2):\t”<<”a=”<<a<<’\t’;cout<<”b=”<<b<<’\t’ <<”c=”<<c<<endl;(obj2*obj3).get(a,b,c);cout<<”(obj2*obj3):\t”<<”a=”<<a<<’\t’;cout<<”b=”<<b<<’\t’ <<”c=”<<c<<endl;}运行结果:(obj1*obj2): a=5 b=10 c=15(obj2*obj3): a=25 b=50 c=75Press any key to continue编程题编写程序,处理学生的成绩单。
要求:(1)从键盘读取五名学生信息,信息包括:学号和3门课成绩;(2)在程序中显示五名学生信息;(3)计算和统计每名学生三科成绩的总分和平均分;(4)计算和统计每科的平均分。
#inlcude “iostream.h”class student{private:int number;int score[3];static int count; //统计学生人数static double total_score[3]; //存储三门课的总分public:student();~student(){};void display();void ave_student(); //计算并输出每个学生的三门课的总分和平均分friend istream& operator>>(istream &input,student &s);friend ostream& operator<<(ostream &output,student &s);static void ave_score() ; //计算并输出三门课程的平均分};int student::count=0;double student::total_score[3]={0};student::student(){number=score[0]=score[1]=score[2]=0;}void student::ave_score(){int i;for(i=0;i<3;i++)cout<<"第"<<i+1<<"门的平均分为:"<<total_score[i]/count<<endl; }void student::ave_student(){int i,total_student=0;for(i=0;i<3;i++)total_student+=score[i];cout<<"三门课总分="<<total_student<<endl;cout<<"三门课平均分="<<double(total_student)/3<<endl;}istream& operator>>(istream &input,student &s){student::count++;cout<<"请依次输入学号和三门课成绩:"<<endl;input>>s.number;int i;for(i=0;i<3;i++){input>>s.score[i];student::total_score[i]+=s.score[i];}return input;}ostream& operator<<(ostream &output,student &s){output<<"学号="<<s.number<<endl;output<<"三门课的成绩依次为:"<<endl;for(int i=0;i<3;i++)output<<s.score[i]<<"";output<<endl;s.ave_student();return output;}void student::display(){cout<<"number="<<number<<endl;cout<<"score="<<endl;for(int i=0;i<3;i++)cout<<score[i]<<" ";cout<<endl;}void main(){student stu[5];int i;for(i=0;i<5;i++)cin>>stu[i];for(i=0;i<5;i++)cout<<stu[i];student::ave_score(); }。