收藏 分销(赏)

继承及派生测试题.doc

上传人:仙人****88 文档编号:7447514 上传时间:2025-01-05 格式:DOC 页数:38 大小:67.50KB 下载积分:10 金币
下载 相关 举报
继承及派生测试题.doc_第1页
第1页 / 共38页
继承及派生测试题.doc_第2页
第2页 / 共38页


点击查看更多>>
资源描述
继承和派生练习 选择题 单选题 1.  下列虚基类的声明中,正确的是(   )。 A. class virtual B:public A B. virtual class B:public A C. class B:public A virtual D. class B: virtual public A 2.  C++类体系中,不能被派生类继承的有( )。 A. 构造函数 B. 虚函数 C. 静态成员函数 D. 赋值操作函数 3.  下列说法错误的是( )。 A. 公有继承的基类中的public成员在派生类中仍是public的 B. 公有继承的基类中的private成员在派生类中仍是private的 C. 私有继承的基类中的public成员在派生类中变成private的 D. 保护继承的基类中的public成员在派生类中变成protected的 4.  下列对继承的描述中,错误的是( )。 A. 析构函数不能被继承 B. 派生类也是基类的组合 C. 派生类的成员除了它自己的成员外,还包含了它的基类的成员 D. 派生类中继承的基类成员的访问权限到派生类保持不变 5.  下列对基类和派生类关系的描述中,错误的是( )。 A. 派生类是基类的具体化 B. 派生类是基类的子集 C. 派生类是基类定义的延续 D. 派生类是基类的组合 6.  C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。 A. 复用 B. 继承 C. 封装 D. 引用 7.  C++类体系中,能被派生类继承的是( )。 A. 构造函数 B. 虚函数 C. 析构函数 D. 友元函数 8.  关于多继承二义性的描述,( )是错误的。 A. 派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性 B. 一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性 C. 解决二义性最常用的方法是作用域运算符对成员进行限定 D. 派生类和它的基类中出现同名函数时,将可能出现二义性 9.  下列对派生类的描述中,( )是错误的。 A. 一个派生类可以作为另一个派生类的基类 B. 派生类至少有一个基类 C. 派生类的成员除了它自己的成员外,还包含了它的基类成员 D. 派生类中继承的基类成员的访问权限到派生类保持不变 10.  若类A和类B的定义如下: class A { int i,j; public: int geti(){return i;} }; class B: public A { int k; public: void make(){k=i*j;} }; 则上述中, ( )是非法的表达式。 A. k=i*j B. int k; C. return i; D. void make(); 11.  关于公有继承,下列说法错误的是( )。 A. 基类的公有成员和保护成员被继承后作为派生类的公有成员和保护成员。 B. 派生类的其他成员可以直接访问基类的公有成员和保护成员。 C. 派生类的对象可以访问基类的私有成员。 D. 派生类成员和对象都无法访问基类的私有成员。 12.  下列说法中错误的是( )。 A. 公有继承时基类中的public成员在派生类中仍是public的; B. 公有继承时基类中的private成员在派生类中仍是private的; C. 私有继承时基类中的public成员在派生类中是private的; D. 保护继承时基类中的public成员在派生类中是protected的; 13.  在公有继承中,基类中的公有成员作为派生类的( )。 A. 公有成员 B. 私有成员 C. 保护成员 D. 私有成员函数 14.  基类中的( )不允许外界访问,但允许派生类的成员访问,这样既有一定的隐藏能力,又提供了开放的接口。 A. 公有成员 B. 私有成员 C. 保护成员 D. 私有成员函数 15.  在下面的表达式中,不表示虚继承的是( )。 A. virtual public B. public virtual C. public D. virtual 16.  设置虚函数的声明中,正确的是( )。 A. 简化程序 B. 消除二义性 C. 提高运行效率 D. 减少目标代码 17.  下面叙述错误的是(   )。 A. 基类的protected成员在派生类中仍然是protected B. 基类的protected成员在public派生类中仍然是protected的 C. 基类的protected成员在private派生类中是private的 D. 基类的protected成员不能被派生类的对象访问 18.  派生类的对象对它的基类成员中( )是可以访问的。 A. 公有继承的公有成员 B. 公有继承的私有成员 C. 公有继承的保护成员 D. 私有继承的公有成员 19.  下列对派生类的描述中,错误的是( )。 A. 一个派生类可以作为另一个派生类的基类 B. 派生类至少有一个基类 C. 派生类的缺省继承方式是private D. 派生类只含有基类的公有成员和保护成员 20.  继承具有( ),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。 A. 规律性 B. 传递性 C. 重复性 D. 多样性 填空题 1. 在继承机制下,当对象消亡时,编译系统先执行 ( ) 的析构函数,然后才执行 ( ) 的析构函数,最后执行 ( ) 的析构函数。 2. 派生类构造函数的初始化列表中包含 ( ) 。 3. 派生类可以定义其( )中不具备的数据和操作。 4. C++将类继承分为( )和( )两种。 问答题 1. 写出下列程序运行结果: #include <iostream> using namespace std; class A { int x; public: int z; void setx(int i){x=i;} int getx(){return x;} }; class B: public A { int m; public: void setvalue(int a,int b,int c) { setx(c); z=b; m=a; } void display() { cout<<getx()<<","<<z<<","<<m<<endl; } }; int main() { B obj; obj.setvalue(2,3,4); obj.display(); return 0; } 2. 写出程序运行结果: #include <iostream> using namespace std; class base { public: void who(){cout<<"base class"<<endl;} }; class derive1:public base { public: void who(){cout<<"derive1 class"<<endl;} }; class derive2:public base { public: void who(){cout<<"derive2 class"<<endl;} }; void main() { base obj1; obj1.who(); derive1 obj2; obj2.base::who(); derive2 obj3; obj3.base::who(); } 3. 阅读下列程序,写出程序运行结果。 #include <iostream> using namespace std; class Base { int x; public: Base(int i) { x=i; cout<<"Constuctor of Base"<<endl; } ~Base(){cout<<"Destuctor of Base"<<endl;} void show(){cout<<"x="<<x<<endl;} }; class Derived:public Base { Base d; public: Derived(int i):Base(i),d(i){cout<<"Constuctor of Derived"<<endl;} ~Derived(){cout<<"Destuctor of Derived"<<endl;} }; int main() { Derived obj(5); obj.show(); return 0; } 4. 阅读下列程序,写出程序运行结果。 #include <iostream> using namespace std; class Person { public: Person(){cout<<"Constructor of Person"<<endl;} ~Person(){cout<<"Destructor of Person"<<endl;} }; class Student:public Person { public: Student(){cout<<"Constructor of Student"<<endl;} ~Student(){cout<<"Destructor of Student"<<endl;} }; class Teacher:public Person { public: Teacher(){cout<<"Constructor of Teacher"<<endl;} ~Teacher(){cout<<"Destructor of Teacher"<<endl;} }; int main() { Student s; Teacher t; return 0; } 5. 阅读下列程序,写出程序运行结果。 #include <iostream> using namespace std; class data { public: int x; data(int n) { x=n; cout<<"data"<<endl; } ~data(){cout<<"data"<<endl;} }; class A { data d1; public: A(int x):d1(x){ cout<<"A"<<endl;}; void dispa() { cout<<d1.x<<","; } ~A(){ cout<<"A"<<endl;}; }; class B:public A { data d2; public: B(int x):A(x-1),d2(x){ cout<<"B"<<endl;} ~B(){ cout<<"B"<<endl;}; void dispb() { dispa(); cout<<d2.x<<endl; } }; int main() { B obj(5); obj.dispb(); return 0; } 6. 阅读下列程序,写出程序运行结果。 #include <iostream> using namespace std; class A { protected: int x,y; public: A() { x=3,y=4; cout << "A() Constructor!" << endl; } A(int m,int n) { x=m,y=n; cout << "A(int m,int n) Constructor!" << endl; } ~A(){cout << "A Destructor!" << endl;} }; class B : public A { protected: int i,j; public: B(int a,int b):A(a,b) { i=3,j=4; cout << "B(int a,int b) Constructor!" << endl; } B(int a,int b,int m,int n):A(m,n) { i=a,j=b; cout << "B(int a,int b,int m,int n) Constructor!" << endl; } ~B(){cout << "B Destructor!" << endl;} void print() { cout<<x<<" "<<y<<" "<<i<<" "<<j<<endl; } }; int main() { B d(1,2); d.print(); return 0; } 7. 阅读下列程序,写出程序运行结果。 #include <iostream> using namespace std; class A { protected: int x,y; public: A(int m=5,int n=6) { x=m,y=n; } }; class B : public A { protected: int i,j; public: B(int a,int b) { i=a,j=b; } B(int a,int b,int m,int n):A(m,n) { i=a,j=b; } void print() { cout<<x<<" "<<y<<" "<<i<<" "<<j<<endl; } }; int main() { B d(1,2); d.print(); B c(1,2,3,4); c.print(); return 0; } 8. 阅读下列程序,写出程序运行结果。 #include <iostream> using namespace std; class A { public: A(int i,int j ) { a=i; b=j; } void move(int x,int y) { a+=x; b+=y; } void show( ){cout<<a<<","<<b<<endl;} private: int a,b; }; class B:public A { public: B(int i,int j):A(i,j){} void fun() { move(3,5); } }; int main( ) { B d(3,4); d.fun(); d.show(); return 0; } 9. 阅读下列程序,写出程序运行结果。 #include <iostream> using namespace std; class BaseClass { public: BaseClass() { cout << "BaseClass Constructor!" << endl;} ~BaseClass() { cout << "BaseClass Destructor!" << endl;} }; class DerivedClass : public BaseClass { public: DerivedClass() {cout << "DerivedClass Constructor!" << endl;} ~DerivedClass() {cout << "DerivedClass Destructor!" << endl;} }; int main() { DerivedClass d; return 0; } 10. 写出下列程序运行结果: #include <iostream> using namespace std; class B0 { public: void display(){cout<<"B0::display()"<<endl;} }; class B1: public B0 { public: void display(){cout<<"B1::display()"<<endl;} }; class D1: public B1 { public: void display(){cout<<"D1::display()"<<endl;} }; int main() { B0 b0; B1 b1; D1 d1; B0 *p; p=&b0; p->display(); p=&b1; p->display(); p=&d1; p->display(); } 11. 写出程序运行结果: #include <iostream> using namespace std; class Base { int x; public: Base(int xx=0):x(xx){cout<<"Constuctor of Base"<<endl;} ~Base(){cout<<"Destuctor of Base"<<endl;} void Print(){cout<<x<<',';} int GetX(){return x;} }; class Derived:public Base { int y; Base z; public: Derived(int xx=0,int yy=0):Base(xx),y(yy),z(xx+yy) {cout<<"Constuctor of Derived"<<endl;} ~Derived(){cout<<"Destuctor of Derived"<<endl;} void Print() { Base::Print(); cout<<y<<','<<z.GetX()<<endl; } }; int main() { Derived obj1(2); obj1.Print(); return 0; } 12. 写出程序运行结果: #include <iostream> using namespace std; class AA { int a; public: AA() { cout<<"Initializing AA!\n"; } ~AA() { cout<<"Destroying AA!\n";} }; class BB { int b; AA p; public: BB() { cout<<"Initializing BB!\n"; } ~BB() { cout<<"Destroying BB!\n";} }; void main() { BB X; cout<<"Ending main!\n"; } 13. 写出程序运行结果: #include <iostream> using namespace std; class A { public: A() { cout << "Constructor A" << endl;} ~A() { cout << "Destructor A" << endl;} }; class B : public A { public: B() {cout << "Constructor B" << endl;} ~B() {cout << "Destructor B" << endl;} }; class C : public B { public: C() {cout << "Constructor C" << endl;} ~C() {cout << "Destructor C" << endl;} }; int main() { C c1; return 0; } 14. 写出程序运行结果: #include <iostream> using namespace std; class A { public: A(){a=0;b=0;} A(int i){a=i;b=0;} A(int i,int j){a=i;b=j;} void display() { cout<<"a="<<a<<" b="<<b; } private: int a,b; }; class B:public A { public: B(){c=0;} B(int i):A(i){c=0;} B(int i,int j):A(i,j){c=0;} B(int i,int j,int k):A(i,j){c=k;} void display1() { display(); cout<<" c="<<c<<endl; } private: int c; }; int main() { B b1; B b2(1); B b3(1,3); B b4(1,3,5); b1.display1(); b2.display1(); b3.display1(); b4.display1(); return 0; } 15. 定义一个基类有姓名、性别、年龄,再由基类派生出教师类和学生类,教师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩。 16. 声明一个哺乳动物Mammal类,再由此派生出狗Dog类,声明一个Dog类的对象,观察基类与派生类的构造函数与析构函数的调用顺序。 17. 声明一个Shape基类,在此基础上派生出Rectangle和Circle类,二者都有GetArea()函数计算对象的面积。使用Rectangle类创建一个派生类Square。 18. 什么叫做虚基类?它有何作用? 19. 如果在派生类B已经重载了基类A的一个成员函数fn1(),没有重载成员函数fn2(),如何调用基类的成员函数fn1(),fn2()? 20. 派生类构造函数执行的次序是怎样的?
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服