中国地质大学(北京)继续教育学院 2012年09课程考试
《面向对象程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
》模拟
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
一.单项选择题
1.以下有关析构函数的叙述,选择正确的填入括号内。( B)
A.可以进行重载可以定义为虚函数 B.不能进行重载可以定义为虚函数
C.可以进行重载不能定义为虚函数 D.不能进行重载不能定义为虚函数
2.以下有关函数缺省参数的出现位置,选择正确的叙述填入括号内。(B )
A.必须全部出现在函数参数表的左部 B.必须全部出现在函数参数表的右部
C.必须全部出现在函数参数表的中间 D.都不对
3.若派生类函数不是基类的友元,关于该函数访问基类成员(C )正确:
A.公有的可被派生类函数访问 B.都可以被派生类函数访问
C.公有和保护的可被派生类函数访问 D.都不对
4.关于函数的所有缺省参数的叙述( B)正确:
A.只能出现在参数表的最左边 B.只能出现在参数表的最右边
C.必须用非缺省的参数隔开 D.都不对
5.关于inline保留字的用途,选择正确的叙述填入括号内。(C )
A.只能用于定义成员函数 B.只能用于定义非成员函数
C.可以定义成员函数及非成员函数 D.都不对
6.关于类的构造函数的定义位置,将最为正确的叙述填入括号内。( D)
A.只能在private下定义 B.只能在protected下定义
C.只能在public下定义 D.定义位置没有限制
7.关于静态数据成员的叙述(D )正确:
A.公有的可在类体外初始化 B.私有的不能在类体外初始化
C.私有和保护的不能在类体外初始化 D.都可以且必须在体外初始化
8.使用friend、virtual、static说明函数的叙述(C )正确:
A.必须同时使用三个 B.只能同时用其中两个
C.只能独立单个地使用 D.都不对
9.如下修饰类体中函数的返回类型,将正确的用法填入括号内。(D )
A.同时使用static和friend B.同时使用static和virtual
C.同时使用friend和virtual D.不同时使用上述三个保留字中的任意两个
10.关于构造的叙述(A )正确:
A.最先构造虚基类 B.最先构造基类
C.最先构造派生类的对象成员 D.都不对
11.在如下关于继承的叙述中,选择正确的填入括号内。( C)
A.私有继承用于实现类之间的ISA关系 B.保护继承用于实现类之间的ISA关系
C.公有继承用于实现类之间的ISA关系 D.都不对
12.有关在类中声明友元函数的叙述,将正确的
答案
八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案
填入括号内。( D)
A.只能在private下声明 B.只能在protected下声明
C.只能在public下声明 D.声明位置没有限制
二.多项选择题
1.将符号为分隔符的编号填入括号内。( BCD )
A. m B. + C. { D. =
2.将用于定义类的保留字的编号填入括号内。( ABD )
A. class B. struct C. int D. union
3.将用于释放p=new int[8]的内存的编号填入括号内。( ABC )
A. free (p) B. delete p C. delete []p D. sizeofp
4.将派生类成员函数可访问的基类成员编号填入括号内。( BC )
A. private B. protected C. public D. 所有成员
5.将不能重载的运算符函数的编号填入括号内。( AB )
A. ? : B. :: C. % D. <<
三.填空题(阅读以下程序并填空)
class A{
int a;
protected:
int b;
public:
int c;
}a;
class B: protected A{
int d;
protected:
int e;
public:
A::c;
int f;
}b;
class C: A{
int g;
protected:
int h;
public:
int c;
}c;
struct D:B,C{
int j;
protected:
B::b;
}d;
void main(void){
int x;
};
1.对于main,对象a的私有成员为________ a.a __________________。
2.对于main,对象a的保护成员为________ a.b __________________。
3.对于main,对象a的公有成员为_________ a.c _________________。
4.对于main,对象b的私有成员为________ b.d __________________。
5.对于main,对象b的保护成员为_____ b.b,b.e __________________。
6.对于main,对象c的保护成员为______ c.h ____________________。
7.对于main,对象c的公有成员为______ c.c ____________________。
8.对于main,对象d的保护成员为_____ d.b,d.e,d.h _______________。
9.对于main,对象d的公有成员为______ d.B::c,d.f,d.C::c,d.j ________。
10.main应使用语句x=____ d.C::c ______取对象d的基类C的成员c的值。
四.名词解释
1.标识符:标识符是程序变量、常量、函数和类型的名字,通常是由字母或下划线开始的字母、数字或下划线等符号序列构成。(要点:仅回答名字或构成得2分,全答得3分)
2.抽象类:抽象类是指定义了纯虚函数、或继承了纯虚函数但没有定义函数体的类。或者抽象类是不能定义或产生实例对象的类。(要点:或者前后的两种回答都可以得分)
3.类型强制:类型强制是指将一种类型映射或转换为另一种类型。(要点:没有映射或转换扣1分,没有涉及两种类型扣1分)
五.判断改错题(阅读以下程序并判断各题是否正确,对正确的就在其题号前打√;错误的在其题号前打χ,并在题干后的括号内更正。)
#include
struct A{A( ){ cout<<'A';}};
struct B{B( ){ cout<<'B';}};
struct C: A{C( ){ cout<<'C';}};
struct D: virtual B, C{D( ){ cout<<'D';}};
struct E: A {
C c;
E( ): c( ){ cout<<'E';}
};
struct F: virtual B, C, D, E{
F( ){ cout<<'F';}
};
void main( ){ /*……*/ }
(√ ) 1.如main定义Aa,则输出为A。 ( )
( X) 2.如main定义Cc,则输出为BAC。 ( AC )
(√ ) 3.如main定义Dd,则输出为BACD。 ( )
( √) 4.如main定义Ee,则输出为AACE。 ( )
(X ) 5.如main定义Ff,则输出为BCDEF。 ( BACACDAACEF )
六.指出各类的成员及其存取属性
class A{
int a;
protected:
int b;
public:
int c;
};
class B: protected A{
int d;
protected:
int e;
public:
A::c;
int f;
};
class C: A{
int g;
protected:
int h;
public:
int i;
};
class D:B,C{
int j;
protected:
B::b;
int k;
private:
int n;
};
参考答案:
各类的成员及其存取属性如下。
七.指出以下程序的语法错误及其原因
class A{
static inta=0;
protected:
int b;
public:
int c;
A(int);
operator int( );
} a(1, 2);
class B: A{
B(int);
virtual int d;
int e;
public:
A::b;
friend int operator =(B);
static B(int, int);
} b=5;
class C: B{
public:
int operator++(double);
};
int main( ){
int*A::*p, i;
i=a.a;
i=A(4);
i=b.c;
p=&A::c;
i=b;
return ;
}
参考答案:
错误及其原因见注释。
class A{
static int a=0; //不能在类的体内初始化
protected:
int b;
public:
int c;
A(int);
operator int( );
} a(1, 2); //没有定义A(int, int)
class B: A{
B(int);
virtual int d; //virtual不能用于数据成员
int e;
public:
A::b; //修改而不是恢复访问权限
friend int operator =(B); //不存在普通赋值函数的重载,=必须重载为双目的
static B(int, int); //构造函数不能定义为不带this参数的静态函数成员
} b=5; //B(int)是不可访问的私有构造函数
class C: B{
public:
int operator++(double); //必须用int定义后置运算
}; //C必须定义构造函数,因B定义有带参构造函数且没有无参构造函数
int main( ){
int*A::*p, i;
i=a.a; //a.a是私有的,不能被不是A的友元的main访问
i=A(4);
i=b.c; //b.c是私有的,不能被不是B的友元的main访问
p=&A::c; //A::c不是一个int *指针
i=b; //B不存在公有的B::operator int( )或B::operator A( )
return ; //返回void类型,与main声明的返回类型不一致
}
八.为了没有误差地表示分数,定义类FRACTION来表示分数,请编程实现分数类中的除cmd外的所有函数
class FRACTION{ //对于,numerator存分子6,denominator存分母7
int numerator, denominator;
static int cmd(int x, int y);//求整数x,y的最大公约数
public:
int operator>(const FRACTION&)const;//大于比较,例>
FRACTION(int num, int den=1);//num、den各为分子和分母
FRACTION operator*( )const;//分数约简,*
FRACTION operator+(const FRACTION&)const;//加法,+=
FRACTION operator*(const FRACTION&)const;//乘法,
};
int FRACTION::cmd(int x, int y){
int r;
if(x(const FRACTION&f)const{
double d= denominator *f.denominator;
return (numerator*f.denominator/d >denominator*f.numerator/d);
}
FRACTION FRACTION::operator*( )const{
int c=cmd(numerator, denominator);
return FRACTION(numerator/c, denominator/c);
}
FRACTION FRACTION::operator+(const FRACTION&f)const{
int n= numerator*f.denominator+denominator*f.numerator;
int d= denominator*f.denominator;
return *FRACTION(n, d); //*对运算结果进行约分运算
}
FRACTION FRACTION::operator*(const FRACTION&f)const{
return *FRACTION(numerator*f.numerator,denominator*f.denominator); //*约分
}
九.设计题
1.如下复数类说明了五个成员函数,请详细定义这五个函数的函数体。(每个定义4分)
class COMPLEX{ //real, imag分别为复数的实部和虚部,
double real, imag; //若x=3+5i,则x.real=3,x.imag=5
public:
COMPLEX(double r=0, double i=0);
COMPLEX& operator += (const COMPLEX &c);
COMPLEX& operator ++ ( ); //复数的实部和虚部加1
COMPLEX operator – ( ) const; //将实部和虚部的符号求反
COMPLEX operator + (const COMPLEX &c) const; //复数加法
};
参考答案:设计题答案要点如下,达不到要求各扣1分。
①所有函数头必须包含COMPLEX::
②构造函数定义时不能再次定义缺省参数
③返回类型为COMPLEX&的&不能省略
④返回类型为COMPLEX&的必须用return *this
⑤返回类型为COMPLEX的必须定义局部对象或使用常量对象
⑥const不能漏掉,凡尾部部带const的函数不能改变当前对象的值。
43. 五个成员函数如下。
COMPLEX::COMPLEX(double r, double i){real=r;imag=i;}
COMPLEX& COMPLEX::operator += (const COMPLEX &c){
real+=c.real;
imag+=c.imag;
return *this;
}
COMPLEX& COMPLEX::operator ++ ( ){//前置运算,先运算后取值
real++;
imag++;
return *this;
}
COMPLEX COMPLEX::operator - ( ) const
{return COMPLEX(-real, -imag); }
COMPLEX COMPLEX::operator + (const COMPLEX &c) const
{return COMPLEX(real+c.real, imag+c.imag);}
第8页(共8页)