《面向对象程序设计》模拟试卷2
题 号 | 一 | 二 | 三 | 四 | 五 | 六 | 七 | 八 | 九 | 十 | 总分 |
得 分 | |||||||||||
评卷人 | |||||||||||
(共六大题)
一、判断题(√/×,每题1分,共10分)
1、程序调试就是出并改正C++源程序中的语法错误。 ( )
2、C++语言不允许在重载运算符时改变运算符的结合性。 ( )
3、在定义枚举类型时,可以对其中的枚举元素指定值。 ( )
4、在C++中,应该使用new , free来动态分配和释放内存。 ( )
5、如果A类是B类的友元类,而B类是C类的派生类,则C类也是A类的友元类。( )
6、派生类的成员函数可以直接访问基类的所有成员。 ( )
7、黑盒测试是把程序看成一个封装的系统,测试只在程序接口处进行。 ( )
8、在基类中被说明为虚函数的类的成员函数必须在每个派生类中说明为虚函数,才能具有多态的特征。 ( )
9、面向对象的程序设计中,对象信息的隐藏主要是通过封装实现的。 ( )
10、用new动态申请的内存是在堆中分配的,而不是在栈中分配的。 ( )
二、单项选择题 (每题1分,共10分)
1.下面( )的叙述不符合赋值兼容的原则。
(a) 派生类的对象可以赋值给基类的对象。
(b) 基类的对象可以赋值给派生类的对象。
(c) 派生类的对象可以初始化基类的引用。
(d) 派生类的对象的地址可以赋值给指向基类对象的指针。
2.友元运算符@obj被C++编译器解释为( )。
(a) operator@(obj) (b) operator@(obj,0)
(c) obj.operator@() (d) obj.operator@(0)
3.对虚函数的调用( )。
(a) 一定使用动态联编 (b) 必须使用动态联编
(c) 一定使用静态联编 (d) 不一定使用动态联编
4.声明类test的复制构造函数的正确形式是( )。
(a) int test( ); (b) void test( ); (c) test(void); (d) test(test&);
5.( )是对类test的析构函数的声明。
(a) ~test::test(参数); (b) void ~test::test(参数);
(c) test::~test( ); (d) void ~test::test( );
6.下列说法中不正确的是( )。
(a) 公有继承时基类中的public成员在派生类中仍是public的。
(b) 公有继承时基类中的private成员在派生类中仍是private的。
(c) 私有继承时基类中的public成员在派生类中是private的。
(d) 保护继承时基类中的public成员在派生类中是protected的。
7.下列关于类和对象的叙述中,错误的是( )。
(a) 一个类只能有一个对象。 (b) 对象是类的具体实例。
(c) 类是对某一类对象的抽象。 (d) 类和对象的关系是一种数据类型和变量的关系。
8.若有定义“int x=17;”,则语句“cout<<oct<<x;”的输出结果是( )。
(a) 11 (b) 0x11 (c) 21 (d) 021
9.在C++中,用于实现运行时多态性的是( )。
(a) 内联函数 (b) 重载函数 (c) 模板函数 (d) 虚函数
10.假定Point为一个类,则执行“Point p;”语句时将自动调用该类的( )。
(a) 参数有默认值的构造函数 (b) 默认构造函数
(c) 拷贝构造函数 (d) 赋值重载函数
三、程序选择填空 (每空2分,共20分)
1.[程序1] 根据已有程序和输出结果完成程序的填空。
程序输出结果为:
50
#include <iostream.h>
#include <math.h>
class Point
{
private:
float X,Y;
public:
Point(float a, float b){X=a;Y=b;};
float distance( ① )
{
float dx, dy;
② ;
return (float)sqrt(dx*dx+dy*dy);
}
};
void main()
{
Point p1(2,3), p2(32,43);
cout << ③ <<endl;
}
① (a) Point p; (b) int p;
(c) double p; (d) char p;
② (a) dx=p.x; dy=p.y;
(b) dx=y-p.x; dy=x-p.y;
(c) dx=x-p.y; dy=y-p.x;
(d) dx=x-p.x; dy=y-p.y;
③ (a) distance(p1,p2) (b) distance(p2,p1)
(c) p1.distance(p2) (d) p1.distance(p1)
2、[程序2] 根据已有程序完成程序的填空。
#include <iostream.h>
class Complex
{
public:
Complex( ){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
Complex operator + (Complex &c2);
① << (ostream&,Complex&);
private:
double real;
double imag;
};
Complex Complex::operator + (Complex &c2)
{return Complex(al,imag+c2.imag);}
② << (ostream& output,Complex& c)
{
output<<"("<&al<<"+"<<c.imag<<"i)"<<endl;
③ ;
}
int main( )
{
Complex c1(2,4),c2(6,10),c3;
c3=c1+c2;
cout<<c3;
return 0;
}
① (a) friend ostream& operator (b) ostream& operator
(c) ostream& friend operator (d) operator ostream&
② (a) friend ostream& operator (b) ostream& operator
(c) ostream& friend operator (d) operator ostream&
③ (a) return 0; (b) return;
指向类成员函数的指针(c) return output (d) return &output;
3、[程序3] 根据已有程序和输出结果完成程序的填空。
#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
Student(int,string,float);
① display();
protected:
int num; string name; float score;
};
Student::Student(int n,string nam,float s)
{ num=n;name=nam;score=s; }
void Student::display()
{ cout <<"num:" <<num <<"\nname:" <<name <<"\nscore:" <<score <<"\n\n"; }
class Graduate:public Student
{
public:
Graduate(int,string,float,float);
void display();
private: float pay;
};
void Graduate::display()
{ cout <<"num:" <<num <<"\nname:" <<name <<"\nscore:" <<score <<"\npay=" <<pay <<endl;}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论