开发一个商城网站多少钱,北京设计公司招聘,开发公司工程部有什么人,wordpress 添加页面1【单选题】在公有派生类的成员函数不能直接访问基类中继承来的某个成员#xff0c;则该成员一定是基类中的#xff08; C #xff09;。#xff08;2.0分#xff09;
A、公有成员B、保护成员C、私有成员D、保护成员或私有成员 注意从类外访问与从派生类中访问 2【单…1【单选题】在公有派生类的成员函数不能直接访问基类中继承来的某个成员则该成员一定是基类中的 C 。2.0分
A、公有成员B、保护成员C、私有成员D、保护成员或私有成员 注意从类外访问与从派生类中访问 2【单选题】什么情况下必须使用虚析构函数 A 2.0分
A、使用delete删除由基类指针指向的派生类对象B、派生类构造函数是虚函数C、使用delete删除由派生类指针指向的派生类对象D、基类构造函数是虚函数 构造函数不能是虚函数 3【单选题】一个类的层次结构中定义有虚函数并且都是公有继承在下列情况下实现动态绑定的是 D 。2.0分
A、使用构造函数调用虚函数B、使用类名限定调用虚函数C、使用类的对象调用虚函数D、使用成员函数调用虚函数 4【单选题】下列关于虚函数的描述中错误的是 A 。2.0分
A、static成员函数可以说明为虚函数B、虚函数是一个成员函数C、在类的继承的层次结构中虚函数是说明相同的函数D、虚函数具有继承性 静态成员函数static函数不能被声明为虚函数。虚函数是与对象的动态类型相关的它们依赖于对象的运行时类型而静态成员函数不依赖于任何对象实例因此不能是虚函数。 5【单选题】下列有关继承和派生的叙述中正确的是 B 2.0分
A、派生类不能访问通过私有继承的基类的保护成员B、如果基类没有默认构造函数派生类就应当声明带形参的构造函数C、多继承的虚基类不能够实例化D、基类的析构函数和虚函数都不能够被继承需要在派生类中重新实现 如果派生类是通过私有方式继承基类那么基类的保护成员protected在派生类中仍然是可以访问的尽管它们不能被派生类的对象访问。 6【单选题】纯虚函数和虚函数的主要区别是 ( D )2.0分
A、返回值类型B、成员访问修饰符C、类中的位置D、纯虚函数不能有实现 7【单选题】Employee是基类HourlyWorker是派生类并重定义了非虚函数print下面的程序段调用了两个print函数输出结果是否相同( D )
HourlyWorker h;
Employee *ePtr h; ePtr-print();
ePtr-Employee::print();
A、取决于print函数的实现B、是如果print是static函数C、否D、是 8【单选题】从同一个基类派生出的各个类的对象之间( D )。2.0分
A、共享部分数据成员每个对象还包含基类的所有属性B、共享所有数据成员每个对象还包含基类的所有属性C、共享部分数据成员和函数成员D、不共享任何数据成员但每个对象还包含基类的所有属性 每个对象都有自己的实例变量副本因此它们不共享数据成员。但是每个派生类的对象确实包含了基类的所有属性因为继承机制使得派生类可以访问基类的属性和方法。 9【单选题】下面叙述不正确的是 D 。2.0分
A、赋值兼容规则也适用于多重继承的组合B、对基类成员的访问必须是无二义性的C、派生类一般都用公有派生D、基类的公有成员在派生类中仍然是公有的 10【单选题】以下说法正确的是( D )2.0分
A、派生类可以和基类有同名成员函数但是不能有同名成员变量B、派生类和基类的同名成员函数必须参数表不同否则就是重复定义C、派生类和基类的同名成员变量存放在相同的存储空间D、派生类的成员函数中可以调用基类的同名同参数的成员函数 在派生类中可以通过基类名和作用域解析运算符::显式调用基类的同名成员函数或者使用this指针来调用基类的成员函数。 11【判断题】派生类可以有选择性地继承基类的部分成员。 错 2.0分 派生类会继承基类的所有成员除了构造函数、析构函数和虚析构函数之外而不能有选择性地继承部分成员。派生类会继承基类的所有公有和保护成员但不会继承基类的私有成员。如果派生类需要使用基类的私有成员可以通过基类的公有或保护成员函数来访问。 12【判断题】派生类的默认构造函数包含有直接基类的构造函数。 对 2.0分 13【判断题】一个抽象类中可以包含有多个纯虚函数一个派生类也可以包含多个虚函数对 注意书写形式 14【判断题】虚函数有继承性基类中说明的虚函数只要在它的派生类中与它名字相同的一定是虚函数。 对 15【判断题】虚函数可以被类的对象调用也可以被类的对象指针和对象引用调用。 对 2.0分 16【判断题】虚函数实现的多态是在编译时期确定的。 错 2.0分 虚函数实现的多态是在运行时runtime确定的而不是在编译时期compile-time。 C运行时会根据对象的实际类型动态类型来决定调用哪个函数这个过程称为动态绑定或晚期绑定。 17【填空题】
写出下列程序的输出结果
#include iostream using namespace std;class A {private:int nVal;public:void Fun(){ cout A::Fun endl; };virtual void Do(){ cout A::Do endl; }};class B:public A {public:virtual void Do(){ cout B::Do endl;}};class C:public B {public:void Do( ){ cout C::Doendl; }void Fun(){ cout C::Fun endl; }};void Call( A * p) {p-Fun(); p-Do();}int main() {Call( new A());Call( new C());return 0;}
1 A::Fun2 A::Do3 B::Do4 C::Do5 C::Fun
答案 1 2 1 4 Call(new A())这里创建了类A的对象并将其地址传递给Call函数。由于Fun不是虚函数所以会调用A类的Fun函数输出为A::Fun。对于Do函数它是虚函数会根据对象的实际类型来调用相应的函数因此会调用A类的Do函数输出为A::Do。 Call(new C())这里创建了类C的对象并将其地址传递给Call函数。对于Fun函数虽然C类中定义了自己的Fun函数但由于Call函数中的参数是A*类型所以会调用A类的Fun函数输出为A::Fun不是虚函数的话就会调用A*。对于Do函数它是虚函数会根据对象的实际类型来调用相应的函数因此会调用C类的Do函数输出为C::Do。 18【填空题】写出下面程序的输出结果
#include iostreamusing namespace std;class B {public:B( ){ cout B_Con endl; }~B( ) { cout B_Des endl; }};class C:public B {public:C( ){ cout C_Con endl; }~C( ) { cout C_Des endl; }};int main(){C * pc new C;delete pc;return 0;}
答案 [填空1] B_Con[填空2] C_Con[填空3] C_Des[填空4] B_Des 考察对多态中继承的构造函数与析构函数的运用 先调用基类的构造函数再调用派生类的构造函数析构函数的调用顺序与其相反 19【填空题】写出下面程序的输出结果:
#include iostream using namespace std;class A {public:A( ) { }virtual void func(){ cout A::func endl; }virtual void fund( ){ cout A::fund endl; }void fun(){ cout A::fun endl;}};class B:public A {public:B ( ) { func( ) ; }void fun( ) { func( ) ; }};class C : public B {public :C( ) { }void func( ){cout C::func endl; }void fund( ){ cout C::fund endl;}};int main(){A * pa new B();pa-fun();B * pb new C();pb-fun();return 0;}
1 A::func2 A::fund3 A::fun4 C::func5 C::fund
答案 1 3 1 4 1.A * pa new B();创建了一个B类型的对象并将其地址赋给了一个指向A的指针。由于B继承自Apa实际上指向的是一个B类型的对象。pa-fun();在 B 类的构造函数中直接调用了 func() 方法而 B 类并没有重写这个方法所以调用的是基类 A 中的 func 方法。 输出A::func。然后再调用函数fun:pa-fun();这里调用了fun函数。由于fun不是虚函数所以会根据指针的静态类型即A*来调用A类的fun函数输出为A::fun。 B * pb new C();创建了一个C类型的对象并将其地址赋给了一个指向B的指针。由于C继承自Bpb实际上指向的是一个C类型的对象。 pb-fun();这里调用了fun函数。由于fun不是虚函数所以会根据指针的静态类型即B*来调用B类的fun函数。在 B 类的构造函数中直接调用了 func() 方法而 B 类并没有重写这个方法所以调用的是基类 A 中的 func 方法。 输出A::func。 由于 func 是虚函数会调用 C 类的 func 方法因为 pb 实际上指向的是 C 类型的对象输出C::func 20【填空题】
#include iostreamusing namespace std;class A {public:A( ) { }virtual void func( ) {cout A::func endl; }~A( ) { }virtual void fund( ) {cout A::fund endl; }};class B:public A {public:B ( ) { func( ) ; }void fun( ) { func( ) ; }~B ( ) { fund( ); }};class C : public B {public :C( ) { }void func( ) { cout C::func endl; }~C() { fund( ); }void fund() { cout C::fund endl; }};int main(){ C c; return 0; }
运行结果[填空1][填空2][填空3]把对应的选项编号填入空中1 A::func2 A::fund3 C::func4 C::fund 答案 1 4 2 C c;创建了一个C类型的对象c。由于C继承自BB继承自A对象的构造将遵循构造函数链从最基类A开始然后是B最后是C。 先调用A的构造再调用B的构造其中会调用函数func()但是B中无重写该函数就会调用基类A的func()输出A::func最后调用C的构造即使C类重写了func()函数B类的构造函数中调用func()时也不会调用C类的版本因为这是在编译时决定的而且C的构造函数还没有执行C类的对象还没有完全构造。因此会调用A类的func()函数输出A::func。 先调用C的析构会调用虚函数fund()但是C中已重写该函数输出C::fund然后调用B的析构会调用虚函数fund()但是B类中没有重写该函数会调用A类中的fund()输出A::fund最后调用A的析构函数