- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高级C练习题2013
面向对象程序设计练习题
一.概念题
定义形式如下的类,C++编译器自动为该类产生的四个缺省函数是什么?写出其原型。
class MyClass
{
public:
void SetX(int);
private:
int x;
};
答:无参构造函数,拷贝构造函数,析构函数,赋值运算符函数。
MyClass();
MyClass(const MyClass );
~MyClass();
MyClass operator=(const MyClass );
定义形式如下的类,写出C++编译器自动生成的拷贝构造函数和赋值运算符函数的定义。
class MyClass
{
public:
void SetX(int);
private:
int x;
};
答:MyClass(const MyClass a)
{ x=a.x; }
MyClass MyClass::operator=(const MyClass a)
{ x=a.x;
return *this; }
函数声明和函数定义有什么区别?
答:1) 函数声明是函数的原型,强调函数如何被使用,不包含函数的实现代码;
2) 函数定义给出函数的实现代码。
拷贝构造函数在哪几种情况下会被调用?
答:1.当类的一个对象去初始化该类的另一个对象时;
2.如果函数的形参是类的对象,调用函数进行形参和实参结合时;
3.如果函数的返回值是类对象,函数调用完成返回时。
构造函数与普通成员函数相比有什么不同?
答:构造函数是类的一种特殊成员函数,一般情况下,它是专门用来初始化数据成员的。
构造函数的名字必须与类名相同,它不具有任何返回类型。构造函数在创建对象时由系统自动调用。
创建派生类对象时,构造函数的调用顺序是什么?
答:1.先调用基类构造函数
2.按定义顺序初始化对象数据成员
3.最后调用本类的构造函数。
哪几种情况必须用到初始化成员列表?
答:类的常量数据成员初始化;
类的引用成员初始化。
类的对象成员初始化,而该对象没有无参构造函数。
基类成员初始化,而基类没有无参构造函数。
C++头文件中通常会包含哪些内容?
类的定义、常量定义、函数声明、全局变量声明
什么是常对象?
答:常对象是指在任何场合都不能对其成员的值进行修改的对象。
什么叫抽象类?
答:包含纯虚函数的类,不能定义抽象类对象,可以定义抽象类的指针或引用,指向或引用派生类对象。
同类对象间是怎样实现数据共享的?
答:通过类的静态数据成员来实现。静态数据成员属于类,而不为某个对象所私有,所有实例对象共享类的静态数据成员。
const char *p1; char * const p2;的区别
答:1) const位于星号的左侧, const用来修饰指针所指向的变量,即指针指向为常量;
2)const位于星号的右侧,const用来修饰指针本身,即指针本身是常量。
函数重载是什么意思?它与虚函数的概念有什么区别?
答:1) 函数重载是相同作用域内存在多个同名的函数,编译系统在编译阶段通过函数参数个数、参数类型不同来区分该调用哪一个函数,即实现的是静态的多态性,但不能仅仅通过函数返回值不同来实现函数重载。
2) 虚函数在基类中通过使用关键字virtual来声明一个函数为虚函数,该函数的功能可能在将来的派生类中重新定义或者在基类的基础之上进行扩展,系统只能在运行阶段才能动态决定该调用哪一个函数,所以实现的是动态的多态性。
函数重载与函数覆盖的区别?
答:函数重载是在相同作用域内,存在多个同名的函数,但函数参数或参数类型不同,调用函数时编译器通过实参类型匹配某个函数版本,属于静态多态性;
函数覆盖指基类和派生类之间存在同名函数,派生类中的函数隐藏了基类的同名函数的现象。
构造函数和析构函数是否可以被重载,为什么?
答:构造函数可以被重载,析构函数不可以被重载。因为构造函数可以带多个参数,而析构函数不能带参数。
分析正误:抽象类不能产生实例,所以不需要有构造函数。
答:错。抽象类中可以包含数据成员,派生类对象初始化时需要通过抽象基类的构造函数完成对其数据成员的初始化。
main 函数执行以前,还会执行什么代码?
答案:全局对象的构造函数会在main 函数之前执行。
delete与 delete []区别:
delete只会调用一次析构函数,而delete[]会调用动态分配的多个对象的析构函数。
解释堆和栈的区别。
答案:栈(stack):由编译器自动分配释放,存放函数的参数、局部变量等。通常在超出作用域后由系统自动释放。
堆(heap):一般由程序员负责分配与释放,若程序员不释放,占用的内存直到程序结束才由OS回收 。
一个类的构造函数和析构函数什么时候被调用,是否需要手工调用?
答:构造函数在创建类对象的时候被自动
文档评论(0)