您好,欢迎访问三七文档
博学谷——让IT教学更简单,让IT学习更有效第一章题目一、填空题1、C++是一种的语言。2、C++作为一门面向对象语言,它的三大特性分别是、、。3、C++有、、、、等优点,但C++语言本身过度复杂,并且C++编译器受到C++复杂性的影响,非常难于编写,即使能够使用的编译器也存在大量问题,而且这些问题大多难于发现。4、观察程序,在下面括号内填入“相等”或“不相等”。#includeiostreamusingnamespacestd;intmain(void){inta,b;cinab;boolc=(a==b);if(c)couta与b()endl;elsecouta与b()endl;return0;}二、选择题5、下列关于iostream的描述中,错误的是()。A、它是标准的C++头文件B、它与iostream.h是两个不同文件C、C++标准不再支持iostream.h文件D、iostream与iostream.h文件形式不同,但其内容实现是一样的6、下列关于C++中的类型转换的说法中,错误的是()。A、static_cast可用于基本数据类型之间的转换B、const_cast在进行类型转换时用来修改类型的const或volatile属性C、dynamic_cast主要用于类层次间的上行和下行转换,以及类之间的交叉转换D、reinterpret_cast在进行类型转换时可以对数据类型进行检查,以确保转换的安全性7、下列关于string的描述中,正确的是()A、string是C++中的基本数据类型B、string包含在头文件iostream中C、用C++string类来定义字符串,不必担心字符串长度、内存不足等情况D、C++中无法用字符数组来处理字符串8、下列关于引用的说法中,错误的是()A、引用在定义时必须初始化B、引用就是指针C、引用在初始化时只能绑定左值,不能绑定常量值D、引用一旦初始化,其值就不能再更改博学谷——让IT教学更简单,让IT学习更有效三、判断题9、语句usingnamespacestd;是对标准命名空间的引用。10、如果定义strings(5,‘a’);则s.length()和s.size()的值是相等的。11、引用实际上是隐式的指针,和指针是同一种数据类型。12、一个函数一旦定义成了内联函数,则在调用时就会将函数代码插入到调用处。四、简答题13、请简述一下引用与指针的区别。14、请简述一下new与malloc在分配内存时的区别。15、定义一组重载函数,实现int、float、char类型数据的相加。第一章答案1、面向对象2、封装继承多态。3、保持与C兼容支持面向对象的机制可重用性、可扩充性、可靠性和可维护性代码性能高多种设计风格4、相等不相等5、D6、D7、C8、B9、对10、对11、错12、错13、引用是隐式的指针,但使用引用与使用指针却有着本质的区别:(1)使用引用类型就不必在swap()函数中声明形参是指针变量。指针变量要另外开辟内存单元,其内容是地址。而引用变量不是一个独立的变量,不单独占内存单元。(2)在main()函数中调用swap()函数时,实参不必用变量的地址(在变量名的前面加&),而直接用变量名。系统向形参传送的是实参的地址而不是实参的值。14、(1)new创建对象时返回的是直接带类型信息的指针,而malloc()返回的都是void*类型的指针.(2)两者在创建对象时都可能造成内存泄露,但new可以定位到哪个文件的哪一行,而malloc()没有这些信息。(3)对于非内置类型对象而言,new/delete在创建对象时不止是分配内存,还会自动执行构造函数进行初始化,对象消亡之前自动执行析构函数,而malloc()/free()只能简单的分配释放内存。(4)new与malloc()申请内存位置不同,new从自由存储区(freestore)分配,而malloc()从堆区(heap)分配。(这一点依据编绎器不同而不同)。15、#includeiostreamusingnamespacestd;博学谷——让IT教学更简单,让IT学习更有效voidadd(intx,inty){coutx+yendl;}voidadd(charch1,charch2){coutch1+ch2endl;}voidadd(doublef1,doublef2){coutf1+f2endl;}intmain(){add(1,2);add('a','b');add(1.2,2.3);system(pause);return0;}第二章题目一、填空题1、类的默认访问权限是。2、C++作为类的每个成员函数都有一个隐含定义的指针,称为指针,它的类型是成员函数所属类的类型。3、若类A中包含成员对象x,则创建A类对象时,先执行的构造函数,再执行的构造函数。4、已知如下程序的输出结果是23,请将画线处缺失的部分补充完整。#includeiostreamusingnamespacestd;classMyClass{public:voidPrint()const{cout23;}};intmain(){MyClass*p=newMyClass();Print();return0;博学谷——让IT教学更简单,让IT学习更有效}二、选择题5、下列关于结构化程序设计方法的说法中,错误的是()。A、在数据处理过程中,采用的是自顶向下、分而治之的方法B、将整个程序按功能划分为几个可独立编程的子模块C、以“对象”和“数据”为中心D、数据和处理数据的过程代码是分离的、相互独立的实体6、有如下程序:#includeiostreamusingnamespacestd;classMyClass{public:MyClass(){cout'A';}MyClass(charc){coutc;}~MyClass(){cout'B';}};intmain(){MyClassp1,*p2;p2=newMyClass('X');deletep2;system(pause);return0;}执行这个程序,屏幕上将显示输出()。A、ABXB、ABXBC、AXBD、AXBB7、下列情况下,不会调用拷贝构造函数的是()。A、用一个对象去初始化同一类的另一个对象时B、将类的一个对象赋予该类的另一个对象时C、函数的形参是类的对象,调用函数进行形参和实参结合时D、函数的返回值是类的对象,函数执行返回调用时8、下列关于静态成员的描述中,错误的是()A、静态成员不属于对象,是类的共享成员B、静态数据成员要在类外定义和初始化C、调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针D、非静态成员函数也可以操作静态数据成员三、判断题9、定义对象引用时,可以对其引用进行初始化,也可以不进行初始化。10、创建对象时会为每个对象的数据成员和成员函数都分配空间。11、使用class定义的类,其默认的访问权限是公有的,使用struct定义的类,其默认的访博学谷——让IT教学更简单,让IT学习更有效问权限是私有的。12、如果一个类拥有资源,比如开辟空间,当这个类的对象发生复制的时候,资源重新分配,需要进行深拷贝,反之,没有重新分配资源,只进行浅拷贝。四、简答题13、请简述一下构造函数的定义语法。14、请简述一下友元的概念以及友元的副作用。15、设计一个Bank类,实现银行某账号的资金往来账目管理,包括建账号、存入、取出等。要求:1)Bank类包括私有数据成员top(当前账指针),date(日期),money(金额),rest(余额)和sum(累计余额)。2)另有一个构造函数和三个成员函数bankin()(处理存入账),bankout()处理取出账)和disp()(输出明细账)第二章答案1、private2、this3、成员对象类A4、(*p).5、C6、D7、B8、C9、错10、错11、对12、对13、(1)、构造函数名与类名相同。(2)、构造函数名前没有返回值类型声明。(3)、构造函数中不能通过return语句返回一个值。(4)、通常构造函数具有public属性。14、友元可以是一个函数,该函数被称为友元函数,友元也可以是一个类,称为友元类。当一个函数或类是一个类的友元时,那么这个友元函数或友元类就可以直接访问类中的所有成员,这样就提高了程序运行效率,也使操作比较方便。但它的不足之处在于破坏了类的封装性,类的出现主要就是为了封装数据,使信息更安全,而友元的出现恰恰破坏了这一初衷,因些在使用友元时要谨慎,如果可以,尽量避免使用。15、#define_CRT_SECURE_NO_WARNINGS#includeiostream#includeiomanipusingnamespacestd;#defineMax100classBank博学谷——让IT教学更简单,让IT学习更有效{inttop;chardate[Max][10];//日期intmoney[Max];//金额intrest[Max];//余额staticintsum;//累计余额public:Bank(){top=0;}voidbankin(chard[],intm){strcpy(date[top],d);money[top]=m;sum=sum+m;rest[top]=sum;top++;}voidbankout(chard[],intm){strcpy(date[top],d);money[top]=-m;sum=sum-m;rest[top]=sum;top++;}voiddisp();};intBank::sum=0;voidBank::disp(){inti;//printf(日期存入取出余额\n);cout日期存入取出余额endl;for(i=0;itop;i++){coutsetw(8)date[i];if(money[i]0)coutsetw(6)-money[i];elsecoutsetw(6)money[i];printf(%6d\n,rest[i]);}}博学谷——让IT教学更简单,让IT学习更有效voidmain(){Bankobj;obj.bankin(2001.2.5,1000);obj.bankin(2001.3.2,2000);obj.bankout(2001.4.1,500);obj.bankout(2001.4.5,800);obj.disp();system(pause);}第三章题目一、填空题1、如果类α继承了类β,则类α称为类,而类β称为类。类的对象可作为类的对象处理。2、派生类对象占用的空间中,的数据成员排列在前,的成员排列在后。3、应在下列程序划线处填入的正确语句是()#includeiostreamclassBase{public:voidfun(){coutBase::funendl;}};classDerived:publicBase{voidfun(){;//显式调用基类的函数fun()coutDerived::funendl;}};4、C++中多态性包括两种多态性:和。二、选择题5、下列关于继承的描述中,错误的是()。A、基类的构造函数和析构函数不可被继承B、派生类继承了基类的全部数据成员和除了构造、析构函数之外的所有成员函数。C、派生类可以添加新成员,用于实现新功能;也可以舍弃继承于基类的成员,用于删除不需要的功能。D、多个派生类可以继承自同一个基类。6、下列关于继承权限的说法中,错误的是()。博学谷——让IT教学更简单,让IT学习更有效A、基类的protected成员在派生类中仍然是protected的B、基类的protected成员在public派生类中仍然是protected的C、基类的protected成员在private派生类中是private的D、基类的protected成员不能被派生类的
本文标题:C++课后习题
链接地址:https://www.777doc.com/doc-2901865 .html