1、面向对象程序设计C+B卷答案题号一二三四五总分核分人得分得分评卷人一、选择题(每题2分,共20分)1、int* const p说明不能修改( A )。A) p指针 B) p指针指向的变量;C) p指针指向的数据类型 D) 上述A、B、C三者。2、下列函数原型声明中,错误的是( D )。 A) void Fun(int x=0, int y=0); B) void Fun(int x, int y); C) void Fun(int x, int y=0); D) void Fun(int x=0, int y);3、关于类和对象不正确的说法是( C)。A)类是一种类型,它封装了数据和操作 B)
2、对象是类的实例C)一个类的对象只有一个 D)一个对象必属于某个类4、下列的各类函数中,不是类的成员函数的是( C )。A) 构造函数 B) 析构函数 C) 友元函数 D) 复制构造函数5、( B )是不可以作为该类的成员的。A) 自身类对象的指针B) 自身类的对象C) 自身类对象的引用 D) 另一个类的对象6、下列关于类的继承描述中,( A)是错误的。A)派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数B)派生类也是基类,但基类不一定具有派生类的全部属性和方法C)继承描述类的层次关系,派生类可以具有与基类相同的属性和方法D)一个基类可以有多个派生类,一个派生类可以有多个基类7、下列
3、关于静态数据成员的描述中,正确的是(A)。 A) 静态数据成员是类的所有对象共享的数据B) 类的每个对象都有自己的静态数据成员C) 类的不同对象有不同的静态数据成员值D) 静态数据成员不能通过类的对象调用8、已知在一个类体中包含如下函数原型:Volumeoperator-(Volume)const;,下列关于这个函数的叙述中,错误的是( B )。A) 这是运算符-的重载运算符函数B) 这个函数所重载的运算符是一个一元运算符C) 这是一个成员函数D) 这个函数不改变类的任何数据成员的值9、带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化( D
4、 )。A)与虚基类下面的派生类个数有关B) 多次C) 二次 D)一次10、下列关于类模板的描述中,错误的是( D )。A类模板的成员函数都是模板函数B可以为类模板参数设置默认值C类模板描述了一组类D类模板中只允许有一个类型参数得分评卷人二、判断题(每题1分,共10分)1、在保护继承中,对于垂直访问同于公有继承,而对于水平访问同于私有继承。2、析构函数是一种函数体为空的成员函数。3、重载函数必须有不同的参数列表。4、可以用delete释放不是用new运算符分配的内存。5、某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。6、关系运算符可以用来比较两个字符的大小,也可用来比较两个字符串的
5、大小。7、公有继承可以实现子类型。8、纯虚函数是在基类中说明的虚函数,它在该基类中没有定义具体的操作内容。9、引用是某个变量的别名,对引用的操作就是对被引用变量的操作。10、在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。得分评卷人三、填空题(每题2分,共20分)1、类是对具有共同属性和行为的一类事物的抽象描述,共同属性被描述为类中的 数据成员 ,共同行为被描述为类中的 成员函数 。2、假定A是一个类名,则该类的拷贝构造函数的原型说明语句为:A(const A & a)。3、在派生类的成员中有私有成员、保护成员、 公有成员、 不可访问成员四类成员。4、从实现的角度划分,C+所支持
6、的两种多态性分别是 编译 时的多态性和运行时的多态性。实现运行时多态,要使用虚函数。7、带有纯虚函数的类称为抽象类,抽象类的特征是不能声明一个抽象类的对象,但可以声明一个抽象类的指针或引用。5、若需要把一个函数“voidF();”定义为一个类AB的友元函数,则应在类AB的定义中加入一条语句:friend void F(AB &);。8、有如下类定义:classSamplepublic:Sample();Sample();private:staticintdata;将静态数据成员data初始化为0的语句是int Sample:data=0;。6、对双目运算符,被重载为成员函数时,有 一 个参数,
7、被重载为友元函数时,有 两 个参数。9、列出C+中的两种代码复用方式:继承和模板。10、已知intsum(intn)returnn+n;longsum(longn)returnn+n;是一个函数模板的两个实例,则该函数模板的定义是 。(templateTsum(Tn)returnn+n;)。得分评卷人四、程序阅读题(共10分)1、(4分)写出执行下面程序的输出结果。213312#includeusingnamespacestd;class Partpublic: Part(int x=0):val(x)coutval; Part( )coutval;private: int val; clas
8、s Wholepublic: Whole(int x,int y,int z=0): p2(x), p1(y), val(z)coutval;Whole( )coutval; private: Part p1,p2; int val; ; int main() Whole obj(1,2,3); return 0; 2、(3分)写出执行下面程序的输出结果。const:val=10 val=20#includeusingnamespacestd;class MyClass public: MyClass(int x):val(x) void print( ) const coutconst:va
9、l=valt; void print( ) coutval=valt;private: int val;int main( ) const MyClass obj1 (10); MyClass obj2(20); obj1.print(); obj2.print(); return 0;3、(3分)写出执行下面程序的输出结果。#includeusingnamespacestd;class Basepublic: void fun1( )coutBasen; virtual void fun2( )coutBasen;class Derived: public Basepublic:void f
10、un1( )coutDerivedn;void fun2( )coutDerivedn;void f(Base& b)b.fun1();b.fun2();int main()Derived obj;f(obj);return 0;BaseDerived得分评卷人四、程序改错题(每处2分,共10分)有一个源程序文件proj.cpp,其中编号为、的语句有错误。请修改这些错误,使程序的输出结果为:1 2 3 4 5 6 7 8 9 10。源程序文件proj.cpp清单如下: #include using namespace std;#includeusingnamespacestd;classMyC
11、lasspublic:void MyClass(intlen) -MyClass(int len) array=newintlen;arraySize=len; for(inti=0;iarraySize;i+)arrayi=i+1; MyClass()deletearray;-delete array;voidPrint()const for(inti=0;iarraySize;i+) cinarrayi;-cout arrayi ; coutPrint();return0;得分评卷人六、程序设计题(共30分)1、(5分)编写一个对具有n个数组元素(通用类型)的数组进行升序排序的函数模板。2
12、、(10分)定义一个商品类CGoods,其中包含商品号(longno)、商品名(char*p_name)、商品价格(doubleprice)三个数据成员,以及相应的构造函数、拷贝构造函数、析构函数、打印数据成员的成员函数。3、(15分)以CGoods类为基类,派生出服装类CClothes和食品类CFood两个派生类,并在这两个类中分别增加一个表示品牌的指针数据成员(char*p_brand)和表示用途的成员函数(voidusedFor()可分别输出一条表示服装和食品用途的信息)。为了能够采用动态联编的方式调用派生类的usedFor()成员函数,应该在CGoods类及其派生类CClothes和C
13、Food类中作何改动?写出CClothes类和CFood类的完整定义(包括构造、析构和usedFor()成员函数的实现)。1.#include using namespace std;template void bubbleSort(T a, int n) int i, j; T temp;for (i=1; i n; i+) for (j=0; j aj+1) temp = aj; aj= aj+1; aj+1 = temp; template void print(T a, int n) for (int i=0; i n; i+) cout ai ;cout endl; int main
14、() int a = 2, 3, 1, 6, 43, 22; double b = 2.3, 3.2, 1.6, -6.0, 4.3, 2.2; print(a, 6); bubbleSort(a, 6);print(a, 6); print(b, 6); bubbleSort(b, 6); print(b, 6); return 0;2.#include #include using namespace std; class CGoods private: long no; char *p_name; double price;public: CGoods(long no_val, char
15、 *p_val, float price_val); CGoods(const CGoods &r_good); CGoods() delete p_name; void print() const; virtual void usedFor() =0; CGoods:CGoods(long no_val, char *p_val, float price_val) no = no_val; p_name = new charstrlen(p_val)+1; strcpy(p_name, p_val); price = price_val; CGoods:CGoods(const CGoods
16、 &r_good) no = r_good.no; p_name = new charstrlen(r_good.p_name)+1; strcpy(p_name, r_good.p_name); price = r_good.price; void CGoods:print() const cout Course number: no endl; cout Course name: p_name endl; cout Course price: price endl;3.class CClothes : public CGoods private: char *p_brand;public:
17、 CClothes(long no_val, char *p_val, float price_val, char *p_brandby) : CGoods(no_val, p_val, price_val) p_brand = new charstrlen(p_brandby)+1; strcpy(p_brand, p_brandby); CClothes() delete p_brand; void usedFor() cout Used for dressing endl; ;class CFood : public CGoodsprivate: char *p_brand; public: CFood(long no_val, char *p_val, float price_val, char *p_brandby) : CGoods(no_val, p_val, price_val) p_brand = new charstrlen(p_brandby)+1; strcpy(p_brand, p_brandby); CFood() delete p_brand; void usedFor() cout Used for eating endl; ;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1