华为C++笔试题最新最全.docx
- 文档编号:8498811
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:57
- 大小:40.68KB
华为C++笔试题最新最全.docx
《华为C++笔试题最新最全.docx》由会员分享,可在线阅读,更多相关《华为C++笔试题最新最全.docx(57页珍藏版)》请在冰豆网上搜索。
华为C++笔试题最新最全
脚本执行失败问题
1.虚函数是可以内联的,这样就可以减少函数调用的开销,提高效率(错误)
2.一个类里可以同时存在参数和函数名都相同的虚函数与静态函数(错误)
3.父类的析构函数是非虚的,但是子类的析构函数是虚的,delete子类指针(指向该子类对象),会调用父类的析构函数(正确)//任何情况下删除子类都会调用到父类的析构函数
4.对于下面的类CA,sizeof(CA)=_B_:
A.4B.8C.12D.16
classCA
{
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;}
};
classCSon:
publicCParent
{
public:
CSon(){}
~CSon(){g_iCount+=2;}
};
main()
{
CParent*p=newCSon();
deletep;
std:
:
cout< : endl; } 6.请问下面这段程序的输出结果是_A_: A.2,1,B.2,2,C.1,1,D.1,2, classCParent { public: CParent(){} virtual~CParent(){} public: virtualvoidPrint() {std: : cout<<"1,";}; }; classCSon: publicCParent { public: CSon(){}; virtual~CSon(){}; public: voidPrint() {std: : cout<<"2,";}; }; voidTest1(CParent&oParent) {oParent.Print();} voidTest2(CParentoParent) {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 { public: 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(); } 8.请问下面这段程序的输出结果是_C_: 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();} virtual~CSon(){} public: voidPrint(){std: : cout<<"2,";} }; main() { CParent*pParent=newCSon(); deletepParent; } 9.请问下面这段程序的输出结果是_D_: A.2,2,B.2,C.输出结果不确定D.以上都不对 classCParent { public: CParent(){Print();} virtual~CParent(){} public: virtualvoidPrint()=0; }; classCSon: publicCParent { public: CSon(){Print();} virtual~CSon(){} public: voidPrint() {std: : cout<<"2,";}; }; main() { CParent*pParent=newCSon(); deletepParent; } 10.请仔细阅读以下程序: classBase { public: virtualbooloperator==(intiValue) { std: : cout<<"IamBaseclass! "< : endl; returntrue; } virtual~Base(){} }; classDerive: publicBase { public: virtualbooloperator==(intiValue) { std: : cout<<"IamDeriveclass! "< : endl; returntrue; } virtual~Derive(){} }; intmain() { Derivederive; Base*pBase=&derive; Derive*pDerive=&derive; *pBase==0; *pDerive==0; return0; } 程序的输出结果是_B_: A、IamBaseclass! Iambaseclass! B、IamDeriveclass! IamDeriveclass! C、Iambaseclass! IamDeriveclass! D、IamDeriveclass! IamBaseclass! 11.请仔细阅读以下程序: classBase { public: virtualvoiddisplay(std: : stringstrShow="IamBaseclass! ") {std: : cout< : endl;} virtual~Base(){} }; classDerive: publicBase { public: virtualvoiddisplay(std: : stringstrShow="IamDeriveclass! ") {std: : cout< : endl;} virtual~Derive(){} }; intmain() { Base*pBase=newDerive(); Derive*pDerive=newDerive(); pBase->display(); pDerive->display(); deletepBase; deletepDerive; return0; } 程序的输出结果是_C_: A、IamBaseclass! Iambaseclass! B、IamDeriveclass! IamDeriveclass! C、Iambaseclass! IamDeriveclass! D、IamDeriveclass! IamBaseclass! 12.请仔细阅读以下程序: classBase { public: virtualvoiddisplay()const {std: : cout<<"IamBaseclass! "< : endl;} virtual~Base(){} }; classDerive: publicBase { public: virtualvoiddisplay() {std: : cout<<"IamDeriveclass! "< : endl;} virtual~Derive(){} }; intmain() { Base*pBase=newDerive(); Derive*pDerive=newDerive(); pBase->display(); pDerive->display(); deletepBase; deletepDerive; return0; } 程序的输出结果是_C_: A、IamBaseclass! Iambaseclass! B、IamDeriveclass! IamDeriveclass! C、Iambaseclass! IamDeriveclass! D、IamDeriveclass! IamBaseclass! 13.在C++中,多态性存在于_B_: A、同一个类的多个同名函数之间 B、子类继承层次中 C、父类的多个同名函数之间 D、以上都不是 14.下面黑体加粗的语句存在问题,请问下面的修改哪个是正确的? B classA { public: voidFunc(); .. }; classB { private: boolFunc()const; .. }; classC: publicA, publicB { ... };//classdefinitionisunimportant Ctest; test.Func();//lookhere A.test.B: : Func();B.test.A: : Func(); C.B: : test.Func();D.A: : test.Func(); 15.判断: 子类可以访问父类保护成员,子类的友元类也可以通过子类对象去访问父类的保护成员。 (正确) 16.下面对protected继承的描述正确的是: C//注意这里是保护继承 A.父类的友元类可以访问子类保护成员 B.子类的友元类可以访问父类的私有成员 C.子类可以访问父类的保护成员 D.父类可以访问子类的保护成员 17.对于下面的代码,描述正确的是: A classA { public: virtualvoidtest(); }; classB: publicA { public: voidtest(); ... }; classC: publicB { public: voidtest(); ... }; A.B类的test函数是虚函数,而C类的也是 B.B类的test函数不是虚函数 C.B类的test函数是虚函数,而C类的不是 D.C类的test函数不是虚函数 18.请指出如下程序的输出结果: D #include classbase { public: base(){cout<<"base()";} ~base(){cout<<"~base()";} }; classsubs: publicbase { public: subs(){cout<<"subs()";} ~subs(){cout<<"~subs()";} }; voidmain() { subss; } A.subs()base()~subs()~base() B.base()subs()~base()~subs() C.subs()base()~base()~subs() D.base()subs()~subs()~base() 19.请指出如下程序的输出结果: B #include classA { public: intn; }; classB: publicA{}; classC: publicA{}; classD: publicB,publicC{}; voidmain() { Dd; d.B: : n=10; d.C: : n=20; cout< : n<<","< : n; } A.20,20B.10,20C.20,10D.10,10 20.判断题: 友元(friend)没有破坏类的封装。 错误 21.下面哪种说法是正确的: B A.派生类从基类public派生,派生类可以直接访问基类private的成员变量和成员函数。 B.派生类从基类public派生,派生类可以直接访问基类protected的成员变量和成员函数。 C.派生类从基类public派生,外部可以直接访问派生类中基类部分protected的成员变量和成员函数。 D.派生类从基类protected派生,外部可以直接访问派生类中基类部分public的成员变量和成员函数。 22.下面哪种说法是不正确的: D A.外部对象不能直接访问类private的成员变量和使用private的成员函数。 B.外部对象不能直接访问类protected的成员变量和使用protected的成员函数。 C.外部对象可以直接访问类public的成员变量和使用public的成员函数。 D.友元(friend)不能直接访问类的private的成员变量和使用private的成员函数。 23.下面那个不是类成员访问限定符: D A.publicB.privateC.protectedD.friend 24.请阅读下面程序片断,成员函数setName的访问限定是什么? A structMan { voidsetName(conststd: : string&strName); voidsetAge(unsignedintiAge); std: : stringgetName()const; unsignedintgetAge()const; private: unsignedintm_iAge; std: : stringm_strName; }; A.publicB.privateC.protectedD.friend 25.下面说法是否正确? 错误 存在下面重载函数声明: 1)voidmyfunc(chara); 2)voidmyfunc(longb); 则下面调用的代码匹配第一个函数 intc=100; myfunc(c); 26.下面哪种情形下myfunc函数声明是重载? C A.intmyfunc(inta,doubleb)和doublemyfunc(inta,doubleb) B.intmyfunc(inta,doubleb)和intmyfunc(inta,doubleb=0.5) C.intmyfunc(inta,doubleb)和intmyfunc(doubleb,inta) D.intmyfunc(inta,doubleb)和doublemyfunc(int,double) 27.下面那种情形下myfunc函数声明是重载? B A.namespaceIBM{//两个名字空间中各有一个myfunc函数 intmyfunc(inta); } namespaceSUN{ intmyfunc(doubleb); } B.namespaceIBM{ intmyfunc(inta); } namespaceSUN{ usingnamespaceIBM; intmyfunc(doubleb); } C.namespaceIBM{ intmyfunc(inta); namespaceSUN{ intmyfunc(doubleb); } } D.classA { public: intmyfunc(inta); } classSubA: publicA { public: intmyfunc(doubleb);//注意这里不是重载 } 28.下面说法正确的是: D A.操作符重载可以改变操作符的运算优先级。 B.操作符重载时,其预定义的操作数可以改变。 例如“! ”是一元操作符,可以重载成有两个参数的二元操作符。 C.C++中所有的操作符都可以被重载。 D.对于内置数据类型的操作符,它预定义的意义不能被修改;也不能为内置数据类型定义其它操作符。 例如不能定义intoperator+(int,int);也不能定义voidoperator+(int[],int[])。 29.假如运行环境int类型4bytes,short类型2bytes,long类型8bytes,存在代码: D unsignedshortx=65530; inta=myfunc(x,20.0); 会优先匹配以下哪一个重载函数? A.intmyfunc(double,double) B.intmyfunc(short,double) C.doublemyfunc(int,float) D.doublemyfunc(int,double) 30.判断题类的析构函数可以是虚函数,但构造函数不可以。 正确 31.判断题一个类的构造函数可以有多个,但析构函数只能有一个。 正确 32.判断题当一个类中有指向其他资源的指针,并由类本身释放,那么可以使用编译系统生成的默认拷贝构造函数进行对象复制。 错误 33.判断题下面的代码是否正确(错误) classCSomething { char*m_c; public: CSomething(){m_c=newchar;} ~CSomething(){deletem_c;m_c=NULL;} CSomething(constCSomething&other)//拷贝构造 {*m_c=*other.m_c;}//这里有问题,此时m_c没有空间,应该先m_c=newchar; CSomething&operator=(constCSomething&a1){……}//重载操作符应该跟拷贝构造是一样的 }; 34.CSomething是一个类,执行下面这些语句后,内存里创建了多少个CSomething对象? B CSomethinga;//1个 CSomethingb (2);//1个 CSomethingc[3];//3个 CSomething&ra=a; CSomethingd=a;//1个 CSomething*pA=c; CSomething*p=newCSomething(4);//1个 A.8B.7C.10D.9 35.已知类D是类B的派生类,B有自己的私有数据成员,并实现了自己的拷贝构造函数,类D的拷贝构造函数应该怎么实现? D A、B、 D: : D(constD&other)D: : D(constD&other) {{ 拷贝类D新增的成员拷贝父类B的成员 }拷贝类D新增的成员 } C、D、 D: : D(constD&other)D: : D(constD&other): B(other) {{ B: : B(other);拷贝类D新增的成员 拷贝类D新增的成员} } 36.关于类的构造和析构,下面哪个说法正确C A、构造函数和析构函数都是由系统自动调用的,程序不能主动调用//可以主动调用 B、如果一个类没有声明缺省构造函数,则编译器会自动生成一个缺省构造函数 C、全局类对象的构造函数总是在main函数之前执行的 D、构造函数和析构函数均不能被说明为虚函数//析构函数可以是虚的 37.在执行newA1时,下面代码的输出是什么A #include intinit(conststd: : string&info) { std: : cout< : endl; return0; } classA { intm_x; public: A(): m_x(init("InitA: : m_x")){init("CallA: : A()");}//定义构造函数 }; classA1: publicA { intm_x; intm_y; public: A1(): m_x(init("InitA1: : m_x")),m_y(init("InitA1: : m_y")) {init("CallA1: : A1()");} }; A、B、 InitA: : m_xCallA1: : A1() CallA: : A()InitA1: : m_x InitA1: : m_xInitA1: : m_y InitA1: : m_yCallA: : A() CallA1: : A1()InitA: : m_x C、D、 InitA: : m_xCallA1: : A1() CallA: : A()InitA1: : m_x InitA1: : m_yInitA1: : m_y CallA1: : A1()CallA: : A() 38.有如下的类定义 classBase { ... public: virtual~Base(){std: : cout<<"DestroyBase"< : endl;} }; classDeri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华为 C+ 笔试 最新