面向对象程序设计第五章作业题.docx
面向对象程序设计第五章作业题 第五章作业题 一填空题 1.面向对象程序设计有4个主要特点: _、_ 、_和_。 2.用来派生新类的类称为_,而派生出的新类称为它的子类或派生类。 3.“图形”类Shape中定义了纯虚函数CalArea(),“三角形”类Triangle继承了类Shape, 请将Triangle类中的CalArea函数补充完整。 class Shape public: virtual int CalArea()=0; class Triangle: public Shape public: Triangleint s, int h: side(s),height(h) _ return side*height/2 ; private: int side; int height; ; 4.继承方式包括:_、_、_;如果省略,系统默认为_。 5.派生类中的成员包括从_和_两大部分。 二单项选择题 1下列关于继承方式的描述中,错误的是()。 A如果不显式地指定继承方式,缺省的继承方式是私有(private) B采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员 C采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员 D采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员 2. 下列代码声明了3个类 class Person; class Student:public Person; class Undergraduate:Student; 下列关于这些类之间关系的描述中,错误的是()。 A类Person是类Undergraduate的基类 B类Undergraduate从类Student公有继承 C类Student是类Person的派生类 D类Undergraduate是类Person的派生类 3. 以下关于C+类的说法中,正确的是()。 AC+语言的默认访问权限是private BC+语言中的类定义,用户一定要自己定义一个构造函数用于实例化类 CC+语言中的成员函数的实现部分一定要写在类定义外 DC+语言中的类不能够嵌套定义 4. 下面选项中不属于面向对象程序设计特征的是()。 A继承性B多态性C类比性D封装性 5. 派生类对象对其基类中的什么成员是可访问的()。 A.公有继承的私有成员 B.私有继承的公有成员 C.公有继承的保护成员 D.公有继承的公有成员 6.如果派生类以public方式继承基类,则原基类的protected成员和public成员在派生类中的访问类型分别是()。 A. public和public B.public和protected C.protected 和public D. protected 和protected 7派生类的成员函数不能访问基类的()。 A.共有成员和保护成员 B. 共有成员 C. 私有成员 D. 保护成员 8. 下列关于派生类构造函数和析构函数的说法中,错误的是()。 A派生类的构造函数会隐含调用基类的构造函数 B如果基类中没有缺省构造函数,那么派生类必须定义构造函数 C在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数 D在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数 9定义派生类时,若不使用关键字显式地规定采用何种继承方式,则默认方式为()。 A私有继承B非私有继承C保护继承D公有继承 10建立一个有成员对象的派生类对象时,各构造函数体的执行次序为()。 A派生类、成员对象类、基类B成员对象类、基类、派生类 C基类、成员对象类、派生类D基类、派生类、成员对象类 11下列关于虚基类的描述中,错误的是()。 A使用虚基类可以消除由多继承产生的二义性 B构造派生类对象时,虚基类的构造函数只被调用一次 C声明“class B : virtual public A”说明类B为虚基类 D建立派生类对象时,首先调用虚基类的构造函数 12一个类可以同时继承多个类,称为多继承。下列关于多继承和虚基类的表述中,错误的是()。 A每个派生类的构造函数都要为虚基类构造函数提供实参 B多继承时有可能出现对基类成员访问的二义性问题 C使用虚基类可以解决二义性问题并实现运行时的多态性 D建立最派生类对象时,虚基类的构造函数会首先被调用 13在公有派生的情况下,派生类中定义的成员函数只能访问原基类的()。 A公有成员和私有成员B私有成员和保护成员 C公有成员和保护成员D私有成员、保护成员和公有成 14下列关于继承方式的描述中,错误的是()。 A如果不显式地指定继承方式,缺省的继承方式是私有(private) B采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员 C采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员 D采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员 15下列关于派生类构造函数和析构函数的说法中,错误的是()。 A派生类的构造函数会隐含调用基类的构造函数 B如果基类中没有缺省构造函数,那么派生类必须定义构造函数 C在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数 D在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数 16下列有关继承和派生的叙述中,正确的是()。 A派生类不能访问基类的保护成员B作为虚基类的类不能被实例化 C派生类应当向基类的构造函数传递参数D虚函数必须在派生类中重新实现 17派生类的成员函数不能访问基类的()。 A公有成员和保护成员B共有成员C私有成员D保护成员 18在一个派生类的成员函数中,试图调用其基类的成员函数“void f(); ”,但无法通过编译,这说明()。 Af()是基类的私有成员C派生类的继承方式为私有 Bf()是基类的保护成员D派生类的继承方式为保护 19对于通过公有继承定义的派生类,若其成员函数可以直接访问基类的某个成员,说明该基类成员的访问权限是()。 A公有或私有B私有C保护或私有D公有或保护 三改错题 1、请改正这些错误,使程序的输出结果为:The value is:10 #include using namespace std; class Member / ERROR *found* private: Member(int val) : value(val) int value; ; class MyClass Member _m; public: / ERROR *found* MyClass(int val) int GetValue() const return _m.value; ; int main() MyClass *obj = new MyClass(10); / ERROR *found* 下列语句输出obj指向类中的value值 cout = size) return; int i=0, j; while (i i; j-) /*found* _; /*found* _; break; i+; if (i = num) ai = e; num+; ; void fun(Array& a) int i; for (i = 10; i >= 1; i-) a.add(i); for (i = 0; i >bi; myfile>m>>n; if(m> m >> n; outfile<<gcd(m,n)<<" "<<m*n/gcd(m,n)<<endl; infile.close(); outfile.close(); return 0;