南京大学金陵学院期末试卷2009~2010 学年第一学期课程名称:面向对象程序设计与 Visual C++ 教师姓名:袁杰试卷类型:闭卷专业:______________学号:_____________姓名:_______________成绩___________一、主观题(全都是不定项选择,错选得0分,理由不正确得0分):(80分)9.已知classMyClass{1.下列说法正确的有:(BD )public:A.函数模版不能含有常规形参B.函数模版的一个实例就是一个函数定义C.类模版的成员函数不能是模版函数D.用类模版定义对象时,不能省略模版实参2.已知Value是一个类,value是Value类的一个对象,下面以非成员函数形式重载的运算符函数原型中,正确的有:(A)A.Value operator+(Value v, inti);B.Value operator+(Valuev=value, inti);C.Value operator+(Value v,inti=0);D.Value operator+(Value v=value, inti=0);理由是:___参数不能初始化3.下面是一个模版声明的开始部分:Template <typename T> double…MyClass() {cout<<4;}}a,b[3],*p[3];上述程序段输出为_____4444_______理由是:________________________________________ 10.以下乘法运算符重载定义中正确的是:(BCD)A.MyClass operator*(double,double); B.MyClass operator*(double,MyClass); C.MyClass operator*(MyClass,double); D.MyClass operator*(MyClass,MyClass);理由是:___操作数中至少有一个是自定义类型____ 11. 已知class Constants{public:由此可知:(A )static double getPI() {return 3.1416;} A.这可能是一个函数模版的声明}constant;B.这可能是一个类模版的声明以下能输出3.1416的有:(BC )C.这既可能是一个函数模版的声明,也可能是一个类模版的声明D.这肯定是一个错误的模版声明理由是:___函数的模声明为template<typename>4.派生类以protected方式继承基类,基类的protected A. cout<<constant->getPI();B. cout<<Constants::getPI();C. cout<<constant.getPI();D. cout<<Constants.getPI();理由是:________________________________________ 12.下列模版的定义正确的有:(A)成员和public成员在派生类中的访问属性为:(D ) A. template <typename T>T Get(T x){return x;}A.public和public C.protected和public B.public和protectedD.protected和protectedB. template class<T>Get(T x){return x;}C. template T<class T>Get(T x){return x;}理由是:基类的私有成员公有成员都以protected的身份出现5. C++中的模版包括:(C)A.对象模版和类模版B.对象模版和函数模版B.函数模版和类模版D.对象、函数和类模版6.面向对象程序设计中,信息隐蔽可以通过(C)A.继承B.多态性C.封装D.模版7.8.已知classMyClass{int value;public:MyClass(int n, int m=0){value=m-n;}MyClass(int n):value(n){};intgetValue()const {return value;}};MyClass的构造函数有_____2___个。
D. template T Get(T x){return x;}理由是:________________________________________ 13.以下程序输出结果是:_____0375___________class Base{int x;public:Base(int n=0):x(n){cout<<n;}intgetX()const{return x;}};classDerive:public Base{int y;public:Derive(intm,int n):y(m),Base(n){cout<<m;}Derive(int m):y(m){cout<<m;}};void main(){理由是:________________________________________}Derive d1(3),d2(5,7);理由是:构造函数先构造基类,再访构造派生类 C. operator>=(a,b) D. operator<(b,a)14.以下程序输出结果是:____112_________________ class GA { 理由是:友元函数的参数个数等于原操作个数19. 建立一个有成员对象的派生类对象时,各构造函数public: 执行的次序是(C )virtualint f(){return 1;} };classGB:public GA { public:virtualint f(){return 2;} A. 派生类,成员对象,基类B.成员对象,基类,派生类C.基类,成员对象,派生类D.基类,派生类,成员对象20. 在一个派生类的成员函数中,试图调用基类的成员}; 函数时无法通过编译,可能的原因是(AC )void show(GA g) {cout<<g.f();} void display(GA &g) {cout<<g.f();} void main() {GA a; show(a); display(a);GB b; show(b); display(b); A.该成员函数为基类的私有成员B.该成员函数为基类的保护成员C.派生类的继承方式为私有继承D.派生类的继承方式为保护继承理由是:派生类的公有,私有成员不能直接访问基类私有成员} 21. 肯定不属于 Value 类的成员函数的有(BD )理由是:________________________________________ 15.以下程序的输出为10,则横线中应填入__ABC(abc)__ class ABC {intabc;public:ABC(int n=0):abc(n){}intgetABC()const {return abc;}ABC &operator +=(ABC a){abc += a.abc; A.Value operator+(Value);B. Value operator-(Value,Value);C. Value operator*(Value);D. Value operator/(Value,Value);理由是:________________________________________ 22、在类中必须声明成员函数的____函数名____,成员函数的____函数体__________部分可以写在类外。
23、被调函数运行期间改变主调函数中实参变量的值,则被调函数的形参应该是 ______引用__类型或____指针__________类型。
return __________; 24、_____抽象__________类只能作为基类使用,而不能声}};void main() {ABC x(3),y(7);x+=y;cout<<x.getABC();}理由是:________________________________________ 明它的对象。
25 、进行函数重载时,它们的形参 ___个数____ 或____类型_____必须不同。
26、拷贝构造函数的形参必须是_____它所在类的类型的引用__。
27、通过一个__常______对象只能调用它的常成员函数,不能调用其他成员函数。
28. class Base{protected:16.下列说法错误的有:(D )int amount;A.类的继承有可能带来软件的安全性问题B.虚基类可以解决由多继承产生的二义性问题C.派生类构造函数必须要调用基类的构造函数D.派生类没有继承基类的私有成员理由是:继承基类的私有成员,但不可以直接访问其私有成员public:Base(int n=0):amount(n){}IntgetAmount() const { return amount; } };class Derived : public Base{17.下列说法正确的有:(D )protected: A.运算符重载是多态性的唯一表现B.C++中可以通过运算符重载创造新的运算符C.C++中的所有运算符都可以作为非成员函数重载D.运算符重载时不可以改变其结合性理由是:________________________________________ public:};int value;Derived(int m, int n) : value(m), Base(n) {}IntgetDataconst{ returnvalue+amount;}18. 如果表达式 a>=b 中的”>=”是作为非成员函数重载已知x是Derived对象,表达式中正确的有:()的运算符,则可等效表示为(C )A.x.value+x.getAmount()A. a.operator>=bB. b.operator<a B.x.getData()-x.getAmount()C.x.getData()-x.amountD.x.value+x.amount理由是:________________________________________ 29. 一个空白的类中隐含有_____4____成员,分别是______构造,拷贝,析构,this________________。