欢迎来到天天文库
浏览记录
ID:39118289
大小:391.50 KB
页数:36页
时间:2019-06-25
《华为C++笔试题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、文档名称文档密级:脚本执行失败问题1.虚函数是可以New一个对象的时候要根据虚函数的函数体来填虚表;而内联函数没有函数体,只是在预编译阶段展开内联的,这样就可以减少函数调用的开销,提高效率(错误)2.一个类里可以同时存在同一个类里无论什么函数都不能函数名和参数完全一样参数和函数名都相同的虚函数与静态函数(错误)3.父类的析构函数是非虚的,但是子类的析构函数是虚的,delete子类指针(指向该子类对象)特殊情况,参见题5,会调用父类的析构函数(正确)//任何情况下删除子类都会调用到父类的析构函数4.对于下面的类CA
2、,sizeof(CA)=_B_:A.4B.8C.12D.16classCA{public:CA();virtual~CA();//因为有虚函数,所以会有4个字节的虚表指针private:intm_iTime;//成员变量4个字节public:intGetTime();intSetTime(intiTime);};5.下面这段程序,打印结果是_A_:A.1B.2C.3D.以上都不对intg_iCount=0;classCParent{public:CParent(){}~CParent(){g_iCount+=1;
3、}};classCSon:publicCParent{public:CSon(){}~CSon(){g_iCount+=2;}};main(){CParent*p=newCSon();deletep由于p被声明成父类指针,并且父类和子类的析构函数都非虚,因此delete操作只能根据p指针声明的类型来调用父类的析构函数;std::cout<4、rent(){}virtual~CParent(){}public:virtualvoidPrint(){std::cout<<"1,";};2021-7-16华为机密,未经许可不得扩散第36页,共36页文档名称文档密级:};classCSon:publicCParent{public:CSon(){};virtual~CSon(){};public:voidPrint(){std::cout<<"2,";};};voidTest1(CParent&oParent这里是引用了一个外部对象,该对象的虚表不会发生变化5、){oParent.Print();}voidTest2(CParentoParent这里会在栈空间内重新构造一个CParent类的对象,如果传入实参的类型与CParent不同则虚表会发生变化){oParent.Print();}main(){CSon*p=newCSon();Test1(*p);//这里只是一个引用Test2(*p);//这里会在栈空间重新构造Cparent类对象deletep;}7.请问下面这段程序的输出结果是_D_:A.2,1,B.2,2,C.1,1,D.1,2,classCParent{p6、ublic:CParent(){}virtual~CParent(){}public:voidPrint(){std::cout<<"1,";};};classCSon:publicCParent{public:CSon(){}virtual~CSon(){}public:voidPrint(){std::cout<<"2,";};};main(){CSonoSon;CParent*pParent=&oSon;CSon*pSon=&oSon;pParent->Print();pSon->Print();由于父类和7、子类的Print函数都非虚,所以根据指针类型决定调用关系}8.请问下面这段程序的输出结果是_C_:2021-7-16华为机密,未经许可不得扩散第36页,共36页文档名称文档密级:A.2,1,B.2,2,C.1,2,D.1,1,classCParent{public:CParent(){Print();}virtual~CParent(){}public:virtualvoidPrint(){std::cout<<"1,";}};classCSon:publicCParent{public:CSon(){Print8、();}virtual~CSon(){}public:voidPrint(){std::cout<<"2,";}};main(){CParent*pParent=newCSon()类的构造过程遵循压栈原则,构造过程中虚表尚未建立成功,是静态调用虚函数;deletepParent;}9.请问下面这段程序的输出结果是_D_:A.2,2,B.2,C.输出结果不确定D.以上都不对
4、rent(){}virtual~CParent(){}public:virtualvoidPrint(){std::cout<<"1,";};2021-7-16华为机密,未经许可不得扩散第36页,共36页文档名称文档密级:};classCSon:publicCParent{public:CSon(){};virtual~CSon(){};public:voidPrint(){std::cout<<"2,";};};voidTest1(CParent&oParent这里是引用了一个外部对象,该对象的虚表不会发生变化
5、){oParent.Print();}voidTest2(CParentoParent这里会在栈空间内重新构造一个CParent类的对象,如果传入实参的类型与CParent不同则虚表会发生变化){oParent.Print();}main(){CSon*p=newCSon();Test1(*p);//这里只是一个引用Test2(*p);//这里会在栈空间重新构造Cparent类对象deletep;}7.请问下面这段程序的输出结果是_D_:A.2,1,B.2,2,C.1,1,D.1,2,classCParent{p
6、ublic:CParent(){}virtual~CParent(){}public:voidPrint(){std::cout<<"1,";};};classCSon:publicCParent{public:CSon(){}virtual~CSon(){}public:voidPrint(){std::cout<<"2,";};};main(){CSonoSon;CParent*pParent=&oSon;CSon*pSon=&oSon;pParent->Print();pSon->Print();由于父类和
7、子类的Print函数都非虚,所以根据指针类型决定调用关系}8.请问下面这段程序的输出结果是_C_:2021-7-16华为机密,未经许可不得扩散第36页,共36页文档名称文档密级:A.2,1,B.2,2,C.1,2,D.1,1,classCParent{public:CParent(){Print();}virtual~CParent(){}public:virtualvoidPrint(){std::cout<<"1,";}};classCSon:publicCParent{public:CSon(){Print
8、();}virtual~CSon(){}public:voidPrint(){std::cout<<"2,";}};main(){CParent*pParent=newCSon()类的构造过程遵循压栈原则,构造过程中虚表尚未建立成功,是静态调用虚函数;deletepParent;}9.请问下面这段程序的输出结果是_D_:A.2,2,B.2,C.输出结果不确定D.以上都不对
此文档下载收益归作者所有