C 简答题和编程题汇总-题库.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE PAGE 1 C++ 简答题和编程题汇总 一、简答题: 1.有以下程序结构,请分析访问属性。 class CA {public: void fun1( ); int i; protected: void fun2( ); int j; private: int k; }; class CB: protected CA {public: void fun3( ); protected: int m; private: int n; }; class CC: public CB {public: void fun4( ); private: int p; }; int main( ) {CA a; CB b; CC c1; return 0;} 问: ( 1 )派生类CB中的成员函数能否引用基类CA中的数据成员i,j,k? ( 2 )派生类CC中的成员函数能否调用基类CA中的成员函数fun1和fun2? (3)能否在main函数中用c.fun1(),c.fun2(),c.fun3()和c.fun4()调用fun1,fun2,fun3,fun4成员函数? 答:(1)可以用b1.i引用对象b中的基类A的成员i,因为它是公用数据成员。 不能用b1.j引用对象b中的基类A的成员j,因为它是保护数据成员,在类外不能访问。 不能用b1.k引用对象b中的基类A的成员k,因为它是私有数据成员,在类外不能访问。 (2)可以引用基类A中的数据成员i,j,因为它们在派生类中是公用成员和保护成员,可以被派生类的成员函数访问。不可以引用基类A中的数据成员k,它在派生类中是不可访问的成员。 (3)可以调用成员函数f1,f3,f4,它们是公用成员函数。不能调用成员函数f2,因为它是保护成员函数。 2.为什么要使用虚基类?怎样定义虚基类?用一个实例来解释虚基类在其派生类中的存储方式。 答:如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中会保留该间接共同基类数据成员的多份同名成员。如图所示: 存储关系如(b),在职研究生类有两个Person拷贝。 为避免这种情况,可使用虚基类。虚基类(virtual base class)定义方式如下: class 派生类名:virtual 继承方式 基类类名{...}; virtual 关键字只对紧随其后的基类名起作用。 采用虚基类后存储关系如下: 3.请比较函数重载和虚函数在概念和使用方式方面有什么区别? 答:(1)函数重载可以用于普通函数(非成员函数)和成员函数,而虚函数只能用于类的成员函数; (2)函数重载可以用于构造函数,而虚函数不能用于构造函数; (3)如果对成员函数进行重载,则重载的函数与被重载的函数应当都是同一个类的成员函数,不能分属于两个不同继承层次的类。虚函数是对同一类族中基类和派生类的同名函数的处理,即允许在派生类中对基类的成员函数重新定义。 (4)重载的函数必须具有相同的函数名,但函数参数个数和参数类型二者中至少有一样不同。而虚函数则要求在同一族中的所有虚函数不仅函数名相同,而且要求函数类型、函数参数个数和参数类型都全部相同。 (5)重载的函数是在程序编译阶段确定操作对象的,属静态关联。虚函数是在程序运行阶段确定操作的对象的,属动态关联。 4.派生类的析构函数中需完成什么任务?是否要编写对基数和成员对象的析构函数的调用?为什么? 答:析构函数的功能是在对象被系统释放之前做必要的“清理现场”的工作,析构函数无返回类型也没有参数,情况比较简单。派生类析构函数定义格式与非派生类无任何差异,不要编写对基数和成员对象的析构函数的调用,只要在函数体内把派生类新增一般成员处理好就可以了,因为对新增的成员对象和基类的善后工作,系统会自己调用成员对象和基类的析构函数来完成。 5.简单叙述派生类与基类的赋值兼容规则。 答:凡是基类所能解决的问题,公有派生类都可以解决。在任何需要基类对象的地方都可以用公有派生类的对象来代替,这条规则称赋值兼容规则。它包括以下情况: (1)派生类的对象可以赋值给基类的对象,这时是把派生类对象中从对应基类中继承来的成员赋值给基类对象。反过来不行,因为派生类的新成员无值可赋。 (2) 可以将一个派生类的对象的地址赋给其基类的指针变量,但只能通过这个指针访问派生类中由基类继承来的成员,不能访问派生类中的新成员。同样也不能反过来做。 (3) 派生类对象可以初始化基类的引用。引用是别名,但这个别名只能包含派生类对象中的由基类继承来的成员。 6.为什么析构函数总是要求说明为虚函数? 答:在基类中及其派生类中都动态分配内存空间时,必须把析构函数定义为虚函数,实现撤消对

文档评论(0)

寒傲似冰 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8071104010000026

1亿VIP精品文档

相关文档