类和对象与运算符重载 - 答案

合集下载

C++随堂测试(继承、多态、重载)(答案)

C++随堂测试(继承、多态、重载)(答案)
class D:public B,public 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++(第二版)-习题参考答案

面向对象的程序设计语言――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++复习填空与判断题(参考答案)

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年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

面向对象程序设计期末复习题及答案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++面向对象程序设计试题和答案

(完整版)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++运算符重载题库及答案

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对象就是就相当于函数的第一个参数。

c++自考题库及答案

c++自考题库及答案

c++自考题库及答案C++自考题库及答案1. 问题:C++中的构造函数和析构函数有什么区别?答案:构造函数用于在创建对象时初始化对象,它与类名相同,没有返回类型,且不能被显式调用。

析构函数用于在对象生命周期结束时进行清理工作,它与构造函数名称相同但前面加上波浪号(~),同样没有返回类型,也不能被显式调用。

2. 问题:C++中的类和结构体有什么区别?答案:在C++中,类和结构体在语法上几乎相同,但默认的访问权限不同。

类成员默认是私有的,而结构体成员默认是公开的。

此外,类可以有继承、多态等面向对象的特性,而结构体则没有。

3. 问题:什么是C++中的友元函数?答案:友元函数是一个可以访问类的私有和保护成员的非成员函数。

它通过在类定义中使用`friend`关键字声明。

4. 问题:C++中的运算符重载是什么?答案:运算符重载允许程序员定义或修改已有运算符对用户定义类型(如类或结构体)的操作。

这可以通过运算符函数实现,运算符函数是一个特殊的成员函数或友元函数,它重定义了运算符的行为。

5. 问题:C++中的继承有哪些类型?答案:C++中的继承主要有三种类型:公有继承(public inheritance)、保护继承(protected inheritance)和私有继承(private inheritance)。

公有继承是最常见的形式,基类的公有和保护成员在派生类中仍然是公有和保护的。

保护继承使得基类的公有和保护成员在派生类中变为保护的。

私有继承则将基类的公有和保护成员变为派生类的私有成员。

6. 问题:C++中的多态性是如何实现的?答案:多态性在C++中主要通过虚函数实现。

虚函数允许基类中的函数在派生类中被重写,这样同一个函数调用可以有不同的行为,取决于对象的实际类型。

7. 问题:C++中的模板是什么?答案:模板是C++中一种参数化类型或值的机制,允许程序员编写通用的代码,可以用于不同的数据类型。

模板可以是函数模板或类模板。

C++随堂测试(继承、多态、重载)

C++随堂测试(继承、多态、重载)

C++随堂测试(继承、多态、重载)一、选择题()1.在C++中,类与类之间的继承关系具有()A)自反性 B)对称性 C)传递性 D)反对称性2.在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限()A)受限制 B)保持不变 C)受保护 D)不受保护3.在下列运算符中,不能重载的是( )A.!B. sizeofC. newD. delete4.不能用友元函数重载的是( )。

A.=B.==C.<=D.++5.在哪种派生方式中,派生类可以访问基类中的protected成员()A)public和private B)public、protected和privateC)protected和private D)仅protected6.下列函数中,不能重载运算符的函数是( )。

A.成员函数B.构造函数C.普通函数D.友元函数7.下面叙述错误的是()。

A)基类的protected成员在派生类中仍然是protected的B)基类的protected成员在public派生类中仍然是protected的C)基类的protected成员在private派生类中是private的D)基类的protected成员不能被派生类的对象访问8.如果表达式++i*k时中的”++”和”*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为()。

A.operator*(i.operator++(),k)B.operator*(operator++(i),k)C.i.operator++().operator*(k) D.k.operator*(operator++(i))9.下面叙述错误的是()。

A)派生类可以使用private派生B)对基类成员的访问必须是无二义性的C)基类成员的访问能力在派生类中维持不变D)赋值兼容规则也适用于多继承的组合10.下列虚基类的声明中,正确的是:()A)class virtual B: public A B)class B: virtual public AC)class B: public A virtual D)virtual class B: public A11.已知在一个类体中包含如下函数原型:VOLUME operator-(VOLUME)const;下列关于这个函数的叙述中,错误的是()。

C++程序设计自考题模拟15_真题(含答案与解析)-交互

C++程序设计自考题模拟15_真题(含答案与解析)-交互

C++程序设计自考题模拟15(总分100, 做题时间90分钟)第Ⅰ部分选择题一、单项选择题在每小题列出的四个备选项中只有一个是符合题目要求的。

1.下列不可以作为C++标识符使用的是______SSS_SINGLE_SELA usradfB _jsdhC WhileD 6hole分值: 1答案:D[考点] C++标识符[解析] C++标识符以大小写字母或下画线开始,由大小写字母、下划线、数字组成。

所以D选项以数字开头是错误的。

2.C++相对C语言重大改进之一,即从面向过程变成为面向对象,其主要原因是______SSS_SINGLE_SELA 允许函数重载,并允许设置默认参数B 规定函数说明符必须用原型C 增加了一些新的运算符D 引进了类和对象的概念分值: 1答案:D[考点] 面向过程和面向对象[解析] C语言是结构化程序设计语言,有优有劣,C++是混合型语言,面向对象方法更彻底实现了结构化程序设计的思想。

3.C++预处理语句不包括______SSS_SINGLE_SELA 宏定义B 文件包含C 条件编译D 命名空间分值: 1答案:D[考点] C++预处理程序[解析] C++预处理语句有三种,分别是宏定义、文件包含、条件编译。

4.下列指针的定义和使用中,错误的是______SSS_SINGLE_SELA int i; int*ptr=&i;B int i; int*ptr; i=*ptr;C int*ptr; ptr=0;D int i=5; int*ptr; *ptr=i;分值: 1答案:B[考点] 动态分配内存[解析] A选项定义变量i,并将i的地址赋给指针ptr,使其执行变量i的内存。

B项,定义了变量i和指针ptr,指针未初始化就使用,所以有误。

C项,定义了指针ptr,并使其指向内存地址赋值为0;D项,定义了指针ptr,变量i并进行初始化,将i值赋给指针指向的内存。

5.使用指针时,用户给它分配地址使用的关键字是______SSS_SINGLE_SELA newB deleteC externD auto分值: 1答案:A[考点] C++动态分配内存[解析] 在使用指针时,如果不使用对象地址初始化指针,用户可以自己给它分配地址,申请方式如下:new类型名[size];6.在类定义中,prirate、protected、public关键词可以出现的次数为______ SSS_SINGLE_SELA 任意多次B public至少出现一次C 至多一次D 至少一次分值: 1答案:A[考点] 类成员的访问权限[解析] 访问权限可以反复使用,只不过经常把同一种访问权限的成员放在一起。

二级C++笔试373_真题(含答案与解析)-交互

二级C++笔试373_真题(含答案与解析)-交互

二级C++笔试373(总分94, 做题时间90分钟)一、选择题1.有如下程序:#include <iostream.h>using namespacestd; class Base { protected: inti: public: int j; }; class Derived: public Base { intm: public: int n; } intmain() { Derivedd: d.i=0; //[1] d.J=0;//[2] d.m=0; //[3]d.n=0: //[4] return0; } 其中主函数中有两个赋值语句有错,这两个错误的赋值语句是SSS_SINGLE_SELA [1]和[2]B [1]和[3]C [2]和[3]D [2]和[4]分值: 2答案:B[解析] 本题考核类和派生类的访问权限。

类Derived共有继承Base,那么d 对基类Base成员变量的访问权限不变,由于数据成员 i为保护的,不能通过对象访问。

派生类Derived中变量m为私有的,同样不能通过对象访问,所以错误的赋值语句为[1]和[3]。

2.函数定义为Fun(int &i),变量定义n=100,则下面调用正确的是SSS_SINGLE_SELA Fun(20)B Fun(20+;C Fun(;D Fun(&;分值: 2答案:C[解析] 本题考核函数的调用。

当函数的参数是引用类型时,参数不能是常量、表达式和变量地址,只能是变量本身。

3.C++流中重载的运算符>>是一个SSS_SINGLE_SELA 用于输出操作的非成员函数B 用于输入操作的非成员函数C 用于输出操作的成员函数D 用于输入操作的成员函数分值: 2答案:B[解析] 本题考核运算符重载。

C++中重载输入流运算符>>和输出流运算符<<只能作为非类成员函数重载,且必须使用如下原形:istream& operator>> (istream&,<类名>&);ostream& operator<<(ostream&, <类名>);4.已知类Myst有一个只需要一个double型参数的构造函数,且将运算符“-”重载为友元函数。

C++复习填空与判断题(参考答案)

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、静态成员是局部于类的成员,它提供一种同类对象的__ 共享 __机制。

习题二C++练习(含有答案)

习题二C++练习(含有答案)

习题二一、填空题1. 对运算符进行重载时,不能改变结合性,不能改变操作数个数,不能改变优先级。

2. 当++被重载为后置成员函数时需要0 个参数。

3. 当++被重载为前置成员函数时需要 1 个参数。

4. 在C++中,运算符重载函数可以是成员函数,也可以是友元函数,还可以是普通函数。

5. 友元破坏了类的封装性特性。

6. 类的友元能够访问这个类的所有成员。

7. 类的静态数据成员的初始化是在类外进行的。

8. 类的静态成员函数没有this指针。

9. 类的静态成员函数访问该类的非静态成员可以通过参数传递对象来实现。

10. 不能被重载的类成员函数是构造和析构函数。

二、选择题1. 已知类A有一个带double型参数的构造函数,且将运算符“+”重载为该类友元函数,若如下语句:A x(2.5),y(3.6),z(0); z=x+y; 能够正常运行,运算符重载函数operator+ 应在类中声明为( D )。

A. friend A operator+ (double , double) ;B. friend A operator+ ( double , A &);C. friend A operator+ ( A &, double);D. friend A operator+ ( A & , A &);2. 下列关于运算符重载的描述中,正确的是(D )。

A. 运算符重载可以改变操作数的个数B. 运算符重载可以改变优先级C. 运算符重载可以改变结合性D. 运算符重载不可以改变语法结构3. 友元运算符表达式obj1>obj2被C++编译器解释为(A )。

A. operator>(obj1,obj2)B. >(obj1,obj2)C. obj2.operator>(obj1)D. obj1.operator>(obj2)4. 下列关于C++运算符函数的返回类型的描述中,错误的是(C )。

C++面向对象程序设计课后答案(谭浩强)

C++面向对象程序设计课后答案(谭浩强)

C++面向对象程序设计课后答案(1-4章)第一章:面向对象程序设计概述[1_1]什么是面向对象程序设计?面向对象程序设计是一种新型的程序设计范型。

这种范型的主要特征是:程序=对象+消息。

面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一:程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。

第二:程序中的一切操作都是通过向对象发送消息来实现的,对象接受到消息后,启动有关方法完成相应的操作。

面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。

这种方法的提出是软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。

[1_2]什么是类?什么是对象?对象与类的关系是什么?在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。

对象可以认为是:数据+操作在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。

类和对象之间的关系是抽象和具体的关系。

类是多个对象进行综合抽象的结果,一个对象是类的一个实例。

在面向对象程序设计中,总是先声明类,再由类生成对象。

类是建立对象的“摸板”,按照这个摸板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。

[1_3]现实世界中的对象有哪些特征?请举例说明。

对象是现实世界中的一个实体,其具有以下一些特征:(1)每一个对象必须有一个名字以区别于其他对象。

(2)需要用属性来描述它的某些特性。

(3)有一组操作,每一个操作决定了对象的一种行为。

(4)对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。

例如:雇员刘名是一个对象对象名:刘名对象的属性:年龄:36 生日:1966.10.1 工资:2000 部门:人事部对象的操作:吃饭开车[1_4]什么是消息?消息具有什么性质?在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。

《面向对象程序设计》答案

《面向对象程序设计》答案

实验一熟悉VC++IDE开发环境一、实验目的1、熟悉VC++6.0集成开发环境,熟练掌握VC++6.0项目工作区、各种编辑器、菜单栏和工具栏的使用。

2、掌握如何编辑、编译、连接和运行一个C++程序。

3、通过运行简单的C++程序,初步了解C++源程序的结构和特点。

二、实验要求1、分析下列程序运行的结果。

程序一:#include <iostream.h>int add(int x,int y=8);void main(){ int x=4;cout<<add(x)<<",";cout<<add(x,add(add(x,add(x))))<<endl;}int add(int x,int y){ return x+y;}//12,28程序二:#include <iostream.h>void main(){ int *p,i;i=5;p=&i;i=*p+10;cout<<"i="<<i<<endl;}//i=15程序三:#include <iostream.h>void main(void){ int i=10;int &r=i;r++;cout<<"i="<<i<<", r="<<r<<'\n';i=88;cout<<"i="<<i<<", r="<<r<<'\n';}//i=11,r=11i=88,r=88程序四:#include <iostream.h>int f(int i){ static int k=1;for(;i>0;i--)k +=i;return k;}void main(){ int i;for(i=0;i<5;i++)cout<<f(i)<<" ";}// 1 2 5 11 21程序五:#include <iostream.h>void func();int n=1;void main(){ static int a;int b= -9;cout <<"a:"<<a<<" b:"<<b<<" n:" <<n<<endl;b+=4;func();cout <<"a:"<<a<<" b:"<<b<<" n:"<<n<<endl;n+=10;func();}void func(){ static int a=2; int b=5;a+=2;n+=12;b+=5;cout <<"a:" <<a<<" b:" <<b<<" n:" <<n <<endl;}// a:0 b:-9 n:1a:4 b:10 n:13a:0 b:-5 n:13a:6 b:10 n:35实验二C++对C的扩充一、实验目的1、了解在面向对象程序设计过程中C++对C功能的扩充与增强,并善于在编写程序的过程中应用这些新功能。

面向对象程序设计C++期末试卷2套(含答案)

面向对象程序设计C++期末试卷2套(含答案)

面向对象程序设计C++ 第一套试卷一、选择题(共32分,每小题2分)1.按照C++标识符的规则,下面( B )是c++的标识符。

A.8_afrB.a_ideC.t-axyD._3?d2.C++中声明常量的关键字是( A )A.constB.externC.publicD.enum3.建立( C )的作用是为变量另起一个名字。

A.指针B.枚举C.引用D.结构4.在( D )情况下适宜采用内联函数。

A.函数体含有循环语句B.函数代码多,频繁调用C.函数体含有递归语句D. 函数代码少,频繁调用5.关于new运算符的下列描述中,错误的是( D )A.它可以用来动态创建对象和对象数组B.使用它创建的对象或对象数组可以使用运算符delete删除C.使用它创建对象时要调用构造函数D.使用它创建对象数组时必须指定初始值6.类成员的访问权限中,( C )只能被本类的成员函数和其友元函数访问。

A.shareB.publicC.privateD.protected7.在下面有关构造函数的描述中,正确的是( B )A.构造函数可以带有返回值B.构造函数名字与类名完全相同C.构造函数必须带参数D.构造函数必须定义,不能默认8.有如下类声明:class A{ private: int x;public: A(int n){ x=n;} };class B: public A{ private: int y;public: B(int a,int b); };在构造函数B的下列定义中,正确的是( C )。

A. B::B(int a,int b): x(a),y(b){ }B. B::B(int a,int b): x(a),B(b){ }C. B::B(int a,int b): A(a),y(b){ }D. B::B(int a,int b): A(a),B(b){ }9.设置虚基类的目的是( B )A.简化程序B.消除二义性C.提高运行效率D.减少目标代码10.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的( C )A.public成员B. protected成员C.private成员D.友元11. 应在下列程序划线处填入的正确语句是( D )#include<iostream>using namespace std;class Base{ public: void fun(){cout<<"Base::fun"<<endl;}};class Derived:public Base{ public: void fun() {cout<<"Derived::fun"<<endl;}};void main(){ Derived obj;_____________ //调用基类的fun函数}A.obj.fun(); B. Base.fun(); C. Base->fun(); D. obj.Base::fun();12. 假定一个类的构造函数为B(int x,int y){a=x;b=a*y;},则执行B obj(3,5); 语句后,obj.a和obj.b的值分别为( C )A.3和5 B.5和3 C.3和15 D.20和513.模板的使用是为了( A )A.提高代码的可重用性B.提高代码的运行效率C.加强类的封装性D.实现多态性14.在下列选项中( A )不是ostream类的对象。

c++期末试题及答案

c++期末试题及答案

c++期末试题及答案一、选择题(每题2分,共20分)1. 下列关于C++中类和对象的描述,哪一项是不正确的?A. 类是对象的抽象,对象是类的具体实例B. 类中定义的成员变量和成员函数是共享的C. 一个类只能有一个对象D. 类可以包含数据成员和成员函数答案:C2. 在C++中,哪个关键字用于定义类?A. structB. classC. unionD. enum答案:B3. C++中的引用是什么?A. 一种新的数据类型B. 一个变量的别名C. 一个指针D. 一个函数答案:B4. 下列哪个运算符不能被重载?A. +B. []C. newD. delete答案:C、D5. C++中的虚函数主要用于实现什么功能?A. 函数重载B. 函数覆盖C. 函数默认参数D. 函数默认返回值答案:B6. 在C++中,哪个概念用于实现多态?A. 继承B. 封装C. 虚函数D. 模板答案:C7. 在C++中,如何定义一个常量?A. 使用const关键字B. 使用#define宏C. 使用static关键字D. 使用final关键字答案:A8. 下列哪项是C++标准模板库(STL)的一部分?A. 栈(Stack)B. 队列(Queue)C. 链表(LinkedList)D. 所有选项都是答案:D9. 在C++中,如何实现异常处理?A. 使用try和catch语句B. 使用if语句C. 使用switch语句D. 使用goto语句答案:A10. 在C++中,下列哪个语句用于从函数中返回一个值?A. returnB. breakC. continueD. exit答案:A二、填空题(每题2分,共20分)11. C++中的构造函数是一种特殊的______函数,用于初始化对象的状态。

答案:成员12. 当一个类的对象被销毁时,会自动调用其______函数。

答案:析构13. 在C++中,友元函数可以访问类的______成员。

答案:私有(private)14. 运算符重载是指允许开发者定义或修改______运算符的行为。

《C++程序设计》期末考试及答案

《C++程序设计》期末考试及答案

..;.. 《C++程序设计》期末考试试卷考生注意:1.本试卷共有四道大题,满分100分。

2.考试时间90分钟。

3.卷面整洁,字迹工整。

4.填写内容不得超出密封线。

一、单项选择题(每小题2分,共30分)1.C++是一种()的程序设计语言。

A. 面向对象B. 即可面向过程,又可面向对象C. 面向过程D. 面向系统2.在下面有关析构函数特征的描述中,正确的是()。

A. 一个类中可以定义多个析构函数B. 析构函数名与类名完全相同C. 析构函数不能指定返回类型D. 析构函数可以有一个或多个参数3.下面对于友元函数描述正确的是()。

A. 友元函数的实现必须在类的内部定义B. 友元函数是类的成员函数C. 友元函数破坏了类的封装性和隐藏性D. 友元函数不能访问类的私有成员4.下面描述中,表达错误的是()。

A. 公有继承时基类中的public成员在派生类中仍是public的B. 公有继承时基类中的private成员在派生类中仍是private的C. 公有继承时基类中的protected成员在派生类中仍是protected的D. 保护继承时基类中的public成员在派生类中是private的5.所谓多态性是指()A. 不同的对象调用不同名称的函数B. 不同的对象调用相同名称的函数C. 一个对象调用不同名称的函数D. 一个对象调用不同名称的对象6.重载赋值操作符时,应声明为()函数。

A. 友元B. 虚C. 成员D. 多态7.下列对模板的声明错误的是()。

A. template <class T1,typename T2>B. template <class T1, T2>C. template < typename T>D. template <class T1,class T2,class T3>8.下列类中()不是输入流类istream的派生类。

A. ifstreamB.istrstreamC. iostreamD. ofstream9.()不是构造函数的特征。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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(); }。

相关文档
最新文档