资源描述
班级: 姓名: 学号: .
O…………O…………O…………O…………O装………O订………O线…………O…………O…………O…………O……………O
绍兴文理学院 2011 学年 01学期
信计 专业 09 级《面向对象程序设计》试卷(答题卷) (A)
题 号(型)
一
二
三
四
五
核分人
得 分
总分
评卷人
(考试形式:闭卷 )
一、选择题 (共15分,每小题1分)
1. 下面的函数声明中, 哪一个是” void BC(int a, int b);”的重载函数? ( )
A、int BC(int a, int b)
B、void BC(int a, char b)
C、float BC(int a, int b, int c = 0)
D、void BC(int a, int b=0)
2.C++源程序文件的缺省扩展名为( )
A、cpp B、exe C、obj D、lik
3.假定AA为一个类,a为该类的公有数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为( )
A、px(a) B、px[a] C、px.a D、px->a
4.类中定义的数据成员默认为( )访问属性
A、private B、public C、protected D、friend
5.假定AB为一个类,执行“AB R1=R2;”语句时,将自动调用该类的( )
A、无参构造函数 B、带参构造函数 C、赋值重载函数 D、拷贝构造函数
6.引入友元的主要目的是为了( )
A、增强数据的安全性 B、提高程序的可靠性C、提高程序的效率和灵活性 D、保证类的封装性
7. 下列关于构造函数的描述中,错误的是()
A、 构造函数可以设置默认参数;
B、 构造函数在定义类对象时自动执行
C、 构造函数可以是内联函数;
D、 构造函数不可以重载
8. 派生类的对象对它的基类成员中( )是可访问的
A、公有继承的公有成员 B、公有继承的私有成员
C、公有继承的保护成员 D、私有继承的公有成员
9.关于插入运算符<<的重载,下列说法错误的是( )
A、其返回值类型是ostream & B、此运算符重载必须为类的成员函数
C、运算符的第一个参数类型是ostream & D、运算符函数有两个参数
10.下列虚基类的声明中正确的是( )
A、class virtual B:public A B、class B:virtual public A
C、class B:public A virtual D、class B:public virtual A
11.下列语句中错误的是( )
A、int *p=new int(100); B、int *p=new int[100];
C、int *p=new int; D、int *p=new int[40](0);
12. 不能作为函数重载判断依据的是:( )
A、参数个数 B、参数类型 C、函数名字 D、返回类型
13. 对于类定义
class A{
public:
virtual void func1( ){ }
void func2( ){ }
};
class B:public A{
public:
void func1( ){cout<<〃class B func 1〃<<end1;}
virtual void func2( ){cout<<〃class B func 2〃<<end1;}
};
下面正确的叙述是( )
A、A::func2( )和B::func1( )都是虚函数
B、A::func2( )和B::func1( )都不是虚函数
C、B::func1( )是虚函数,而A::func2( )不是虚函数
D、B::func1( )不是虚函数,而A::func2( )是虚函数
14. 要让一个类中的所有对象具有共同的数据,可以使用__________________。
A、常数成员变量 B、私有数据成员
C、静态数据成员 D、 以上都是
15. 下面函数模板定义中不正确的是( )
A、template<class Q> B、template<class Q>
QF(Q x){ QF(Q x){
return Q+x; return x+x;
} }
C、template<class T> D、template<class T>
TF(T x){ TF(T x){
return x*x; return x>1;
} }
二、填空题 (共20分,每小题2分)
1.无论是什么继承方式,派生类的成员不能访问基类____________属性的成员
2. C++支持的两种多态性分别是_________多态性和___________多态性
3. 含有纯虚函数的类为__________,为克服多重继承的二义性,用__________声明的基类称为虚基类
4.当建立一个新对象时,程序自动调用_________________函数
5.C++标准库中的异常层次的根类为__________________类,MFC类库中绝大多数类都来源自根类___________
6.面向程序设计的特性为:抽象性、______________、_______________、多态性
三、程序阅读题(共30分)
1. (5分)写出下列程序运行后的结果
class test{
private:
int num;
public:
test();
~test();
};
test::test(){num=0;}
test::~test(){cout<<”deructor is active”<endl;}
void main()
{
test x[3];
cout<<”exiting main”<<endl;
}
2. (5分)写出下列程序运行的结果
#include <iostream >
using namespace std;
class BASE
{
O…………O…………O…………O…………O线………O订………O装…………O…………O…………O…………O……………O
char c;
public:
BASE(char n):c(n){}
virtual ~BASE(){cout<<c;}
};
class DERIVED:public BASE{
char c;
public:
DERIVED(char n):BASE(n+1),c(n){}
~DERIVED(){cout<<c;}
};
int main(void)
{ DERIVED('X');
return 0;
}
3. (6分)当输入0和!时,给出下列程序运行的结果
#include <iostream>
using namespace std;
void mian()
{
int i;
char ch;
cout<<”请输入一个整数和一个字符\n”;
try
{
cin>>i>>ch;
if(i==0) throw 0;
if(ch==’!’)throw ‘!’;
}
cath (int )
{
cout<<”输入为 0\n”;
}
catch(char)
{
cout<<’”输入为 !”<<endl;
}
cout<<“程序结束“<<endl;
}
4. (6分) #include<iostream.h>
class A
班级: 姓名: 学号: .
O…………O…………O…………O…………O装………O订………O线…………O…………O…………O…………O……………O
{
public:
A()
{cout<<”constructor class A”;}
}
class B
{
public:
B()
{cout<<”constructor class B”;}
}
Class C
{
public:
C()
{cout<<”constructor class C”;}
}
Class D
{
public:
D()
{cout<<”constructor class D”;}
}
Class E:public A,virtual public B,public C
{
D d;
E()
{
cout<<”constructor class E”;
}
void main()
{ E e;
}
5. (8分) 写出下列程序运行的结果
#include<iostream.h>
class FATHER{
public:
virtual void answer( )
{cout<<I am father\n";
return;
}
}
class DAUGHTER:public FATHER{
public:
virtual void answer( )
{cout<<"I am daughter\n";
return;
}
}
class SON:public FATHER{
public:
void answer()
{cout<<"I am son\n";
return;
}
}
int main()
{ FATHER father;
DAUGHTER daughter;
SON son;
FATHER *who;
who=&father;
who->answer();
who=&daughter;
who->answer();
who=&son;
who->answer();
return 0;
}
四、程序填空题(共21分,每空3分)
1.class A{
int * a;
public:
A(int aa=0) {
________(1)________//用aa初始化a所指向的动态对象
}
~A(){_delete a_;}//释放动态存储空间
};
2.
#include<iostream>
using namespace std;
class myclass
{
int x,y;
public:
myclass(int vx,int vy);
________________(2)_______________
________________(3)_______________
};
myclass::myclass(int vx,int vy)
{
x=vx;
y=vy;
}
int sum(myclass c1)
{
return c1.x+c1.y;
}
void print(myclass c1)
{
cout<<"x="<<c1.x<<"y="<<c1.y<<endl;
}
void main()
{
myclass c(120,23);
cout<<"the sum is"<<sum(c)<<endl;
print(c);
}
3. #include <iostream>
using namespace std;
class A
{
Private:
char name[80];
public:
A( ____(4)______ ) {____(5)______ }
O…………O…………O…………O…………O线………O订………O装…………O…………O…………O…………O……………O
};
class B_____(6)_______
{
public:
B(const char*n)_____(7)_______{}
void PrintName( ) {cout<<”name:”<<name<<endl;};
};
void main( )
{
B b1(“Ling Li”);
b1.PrintName( ) ;
} // 执行结果: name: Ling Li
五、程序设计题(共14分)
1.定义一个抽象类SHAPE,在此基础上派生出RECTANGLE类和CIRCILE类,二者都由getarea()函数计算对象的面积,getperim()函数计算对象的周长。(对象的数据通过构造函数初始化)
4
绍兴文理学院 2011 学年 01学期
信计 专业 09 级《面向对象程序设计)》期末试卷(A)
参考答案及评分标准
一、选择(共15 分,每小题 1分)
BADAD CDABB DDCCA
二、填空(共 20 分,每空 2 分)
1.私有 2 动态, 静态 3.抽象类, virtual 4. 构造 5.exception,CObject
6.封装性,封闭性
三、程序阅读 (共30分)
1. exiting main
deructor is active
deructor is active
deructor is active (5分)
2.XY (5分) 3. 输入为 0
程序结束 (6分)
4. constructor class B
constructor class A
constructor class C
constructor class D
constructor class E (6分)
5. I am father
I am daughter
I am son (8分)
四、程序填空(共21分,每空2分)
(1)a=_new int(aa)
(2)Myclass(int xx){x=xx;} (3) GetNum(){return x;}
(4). const char *n (5)strcpy(name,n);
(6)public A或:protected A (7)A(n)
五、程序设计题(共14分)
#include <iostream.h>
class shape
{
public:
virtual float getarea()=0;
virtual float getpreim()=0;
}; (3分)
class rectangle:public shape
{
private:
float h,w;
public:
rectangle(float hh=1.folat ww=1)
{
h=hh;
w=ww;
}
float getarea() { return h*w;}
float getprim() {return 2*(h+w);}
}; (6分)
class circle:public shape
{
private:
float radius;
public:
circle(float r=1) {radius=r;}
float gerarea() {return radius*radius*3.14;}
float gerprim() {return 2*3.14*radius;}
}; (9分)
void main()
{
shape *s[3];
s[1]=new rectangle(2,4);
s[2]=new circle(5) (11分)
for(int i=1;i<3;i++)
{
if(i==1)
cout<<”矩形面积:“;
else
cout<<”圆面积:”
cout<<s[i]->getarea()<<’\t’;
if(i==1)
cout<<”矩形周长:”
else
cout<<”圆周长:”
cout<<s[i]->getprim()<<’\t’;
cout<<endl;
} (14分)
5
展开阅读全文