面向对象程序设计B

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

专业年级:_________________ 学号_______________ 姓名_____________
(注意:所有答案必须都写到答题纸上)
一、选择题(每题1分,共25分)
1.关于类和对象的说法正确的是______。

A、面向对象程序设计方法通过数据抽象和行为抽象,封装形成了“类”
B、类具有的行为由变量表示。

C、类的属性一般由函数表示,且定义为public的
D、类是具体的,对象是抽象的
2.下面赋值语句错误的是。

A、char name[3]="abc";
B、char name[3]={'a','b','c'};
C、string name=”abc”;
D、string name(“abc”);
3.关于字符常量的写法,错误的是______。

A、'/'
B、"a"
C、'\t'
D、'\0'
4.下面C++标识符命名正确的是:______。

A、class
B、@mail
C、1var
D、_inline
5.下面基本数据类型初始化表达式错误的是______。

A、int i(5);
B、float f=3.56f;
C、char c='ab'
D、double f=3.56;
6.关于友元,下列说法错误的是______。

A、友元关系可以传递
B、友元关系是单向的
C、友元关系是不能被继承的
D、友元的声明使用关键字friend
7.下列函数原型声明中错误的是______。

A、void Fun(int x=0,int y);
B、void Fun(int x,int y);
C、void Fun(int x,int y=0);
D、void Fun(int x=0,int y=0);
8.有以下类定义
class Point{
int _x,_y;
public:
Point(int x=0,int y=0){_x=x;_y=y;}
void Print() const
{cout<<'('<<_x<<','<<_y<<')'<<endl;}
void Move(int xOff,int yOff)
{_x+=xOff;_y+=yOff;}
};
下列语句中会发生编译错误的是______。

A、Point pt;pt.Print();
B、Point pt;pt.Move(1,2);
C、const Point pt;pt.Move(1,2);
D、const Point pt;pt.Print();
9.下列关于构造函数的描述中,错误的是_
A、构造函数可以设置默认参数;
B、构造函数在定义类对象时自动执行
C、构造函数可以是内联函数;
D、构造函数不可以重载
10.下列关于继承的描述中,错误的是_____.
A、C++支持多继承。

B、派生类的成员除了它自己的成员外,还继承了它的基类的成员。

C、派生类至少有一个基类。

D、不管在哪种继承方式下,派生类中继承的基类成员的访问权限在派生类中保持不便。

11.已知A、B、C、D四个类的关系是:A是B、C的共同基类,D是由B、C共同派生的,假设所有继承都是公有继承。

a、b、c、d 分别为它们的对象,且类A中有公有成员varA,下面有语法错误的是______。

A、a.varA;
B、d.varA;
C、a=b;
D、c=d;
12.已知程序中已经定义了函数fun,其原型是int fun(int,int,double);,下面哪一个函数不能和它出现在一个文件中__ ____。

A、char fun(int,int,int);
B、int fun(int,int,float);
C、double fun(int,int,double);
D、int fun(int,int,double) const;
13.下列对变量的引用声明错误的是__________.
A、int a; int &p=a;
B、char a; char &p=a;
C、int a; int &p; p=a;
D、float a; float &p=a;
14.关于C++中的函数,下列说法错误的是______。

A、如果要在编译时将函数体嵌入到调用处,则需要声明内联函数。

B、函数在定义时可以预先声明默认的形参值,声明顺序从右向左。

C、重载函数要求函数名必须相同,函数参数和返回类型必须不同。

D、类外的函数声明为友元函数后可以访问类中私有的成员。

15.下列有关继承和派生的叙述中,正确的是______。

A、如果一个派生类私有继承其基类,则该派生类中的成员不能访问基类的保护成员
B、派生类的成员函数可以访问基类的所有成员
专业年级:_________________ 学号_______________ 姓名_____________
C、在创建派生类对象时,先调用派生类构造函数,再调用基类的构造函数。

D、在销毁派生类对象时,先调用派生类析构函数,再调用基类的析构函数。

16.下列运算符中,不能被重载的是。

A.&& B..* C.- D.++
17.下面有关C++构造函数和析构函数说法正确的是。

A、如果不声明任何构造函数,系统会赋给一个默认(无参)的构造函数。

如果自定义了构造函数,系统也会赋给默认的构造函数。

B、析构函数是用来完成对象被删除前的清理工作,它可以接受参数。

C、构造函数和析构函数都可以是虚函数。

D、构造方法是与类同名的方法,它可以重载。

18.下列关于运算符重载的描述中,正确的是___ __。

A、运算符重载可以改变运算符的操作数的个数
B、运算符重载可以改变优先级
C、运算符重载可以改变结合性
D、只能重载C++语言中已有的运算符
19.C++类体系中,能被派生类继承的有。

A、构造函数
B、虚函数
C、静态成员函数
D、析构函数
20.若有以下定义,则释放指针所指内存空间的操作是_。

float r=news float[10];
A、delete r ;
B、delete []r;
C、delete *r;
D、delete r[];
21.有如下函数模板:
template<class T>
T square(T x) {return x * x;}
其中T是______。

A、函数形参
B、函数实参
C、模板形参
D、模板实参
22.下面哪个类不属于输出流类。

A、ostream
B、iostream
C、ostringstream
D、ofstream
23.下面有关C++输入输出流说法错误的是。

A、一个流就是一个从源流向目的地的数据序列。

B、读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插入。

C、使用C++的输入/输出流类需要包含相应的头文件。

D、输入流是指数据从程序流向目的地。

24.下面是关于派生类声明的开始部分,其中正确的是______。

A、class virtual B:public A
B、virtual class B:public A
C、class B:public A virtual
D、class B: virtual public A
25.已知类D继承类B,且有声明语句B b,*p; D d; 下面赋值语句错误的是______。

A、d=b;
B、p=&d;
C、b=d;
D、p=&b;
二、填空题(每空2分,共30分)
1.面向对象程序设计的基本特征有抽象和封装、__ 、。

2.C++基本数据类型中,类型只有两个值false和true。

3.函数形参和实参结合的方式有值调用和引用调用,其中,调用方式下形参的改变能引起实参的改变。

4.如果某个属性为整个类所共有,不属于任何一个具体对象,则采用关键字来声明。

因为它不属于任何一个对象,因此可以通过类名对它进行访问。

5.假定MyClass为一个类,则该类的拷贝构造函数的原型声明语句为___ ___。

6.双目运算符“+”(加法运算符)可以重载为类的成员函数,且形参的个数为个。

7.C++中动态内存分配的的操作符是。

8.基类中被说明为___ ___权限的成员只能被其派生类的成员函数访问,不能被外界函数访问。

9.已知B、B1、B2、D四个类的关系是:B是B1、B2的共同基类,D是由B1、B2共同派生的,显然D从B1、B2继承来的成员有相同的名称,且这些同名的成员在D对象的内存中会有多个拷贝,如果想让这些同名数据成员在内存中只有一份拷贝,可以在继承时将类设置为。

10.运行过程中的多态需要满足3个条件,第一个是类之间满足,第二是要声明,第三是要由指针、引用来访问。

11.C++标准输入流对象是。

12.带有纯虚函数的类是。

三、读程序填空题(每空2分,共20分)
1.写出下面代码的输出结果:
int i=6;
int &ri=i;
专业年级:_________________ 学号_______________ 姓名_____________
ri=10;
cout<<"ri="<<ri<<",i="<<i;。

2.已知程序如下,根据注释写出C++语句,每空写一句:
class Point {
int X,Y;
static int countP;
public:
Point(int xx=0, int yy=0) {X=xx;Y=yy;countP++;}
static void GetC()
{cout<<countP<<endl;}
};
① ; //对象号countP的初始化语句,初始化值为0。

void main() {
② ; //声明三个元素的对象数组A,要求调用默认的构造函数。

③ ; //声明两个元素的对象数组B,要求调用有参的构造函数,参数自己确定。

④ ; //输出对象号countP的值
}
该程序的输出结果是⑤。

3.有如下程序
class Base{
protected:
Base(){cout<<'A';}
Base(char c){cout<<c;}
};
class Derived:public Base{
public:
Derived(char c){cout<<c;}
};
void main(){
Derived d1('B');
}
执行这个程序屏幕上将显示输出____ __。

4.已知下面程序中应用了面向对象的多态性,每空填上一句,使得程序的输出结果为:Array class B1{
public:
① //虚函数声明
{cout<<"B1::display()"<<endl;}
};
class B2: public B1 {
public:
void display()
{cout<<"B2::display()"<<endl;} //虚成员函数
};
class B3: public B2 {
public:
void display()
{cout<<"B3::display()"<<endl;} //虚成员函数
};
void main() {
B1 b1; //声明基类对象
B2 b2; //声明派生类对象
B3 b3; //声明派生类对象
② ; //声明指针数组,指向b1、b2、b3三个对象。

for(int i=0;i<3;i++)
专业年级:_________________ 学号_______________ 姓名_____________
③ ;//指针调用虚函数
}
四、程序设计题(25分,第1题6分,第2题6分,第3题13分)
1.定义一个日期类Date,使得下面main函数的代码可以执行。

//Date 类的定义
main(){
Date d1;
Date d2(2010,12,9);
}
2.以下为复数类的定义,请将其补全,并实现将运算符“+”重载为Complex类的成员函数,将运算符“-”为重载为Complex类的友
元函数:
class Complex //复数类声明
{
public: //外部接口
Complex(double r=0.0,double i=0.0) { real=r; imag=i; } //构造函数
//重载运算符“+”为成员函数的声明
//重载运算符“-”为友元函数的声明
void display(); //显示复数的值
private: //私有数据成员
double real;
double imag;
};
//重载“+”成员函数的实现代码
//重载“-”友元函数的实现代码
3.按照下面的继承类图设计类,用C++语言实现Person、Student、Teacher、TA类的定义,类中的成员函数show()函数只需给出原型
声明,不必实现,main函数已知,其他要求如下:
1)为属性设计合适的数据类型;
2)按面向对象程序的设计要求,仔细设计该类中成员的访问权限;
3)为Person、Student、Teacher类只设计一个带参数的构造函数(注意派生类构造函数的定义),TA类设计无参的构造函数
和带参数的构造函数;
4)在程序中使用虚基类,使得TA类的对象继承Person类的成员只有一份拷贝;
5)main函数中注释①处调用的是TA类的show函数,即程序必须实现运行时的多态性。

6)不必考虑多文件结构,代码书写要有条理、清晰。

专业年级:_________________ 学号_______________ 姓名_____________
void main(){
Person *p;
TA ta;
p=&ta ;
p->show() ; //①
}。

相关文档
最新文档