面向对象试题带答案
一、选择题
(1)在C++中,关于下列设置参数默认值的描述中,正确的是 (1) 。
A)不允许设置参数的默认值
B)设置参数默认值只能在定义函数时设置
C)设置参数默认值时,应该是先设置右边的再设置左边的
D)设置参数默认值时,应该全部参数都设置
(2)编译时多态性通过使用(2)获得。
A)重载函数 B)虚函数 C)继承 D)析构函数
(3) 如果一个类至少有一个纯虚函数,那么就称该类为_(3)__。
A) 抽象类 B) 虚基类 C) 派生类 D) 以上都不对
(4) 进行文件操作时需要包含__(4) _文件。
A) iostream B) fstream C) stdio.h D) stdliB.h
(5) 在C++中,打开一个文件,就是将这个文件与一个_(5)_建立关联;关闭一个文件,就取消这种关联。
A) 类 B) 流 C) 对象 D) 结构
(6) 公有成员提供了类对外部的接口,而_(6)__不允许外界访问,但允许派生类的成员访问。
A) 公有成员 B) 私有成员 C) 私有成员函数 D) 保护成员
(7)下面关于构造函数的叙述中,正确的叙述是 (7) 。
A)引入构造函数是为了对象的自动执行 B)构造函数名必须与类名相同
C)构造函数不能重载 D)构造函数也是成员函数,因此可以被其它函数调用
(8)以下关于函数指针的叙述中,正确的是(8) 。
A) 函数指针用来存放函数入口地址 B)函数指针用来存放函数调用的结果
C) 函数指针用来指示函数的出口地址 D) 函数指针就是指针函数的别名
(9)下列关于继承的描述中,错误的是(9)。
A)析构函数不能被继承 B)派生类是基类的组合
C)派生类的成员除了它自己的成员外还包含了它的基类的成员
D)派生类中继承的基类成员的访问权限在派生类中保持不变
(10)以下正确的描述是 (10) 。
在C++语言程序中 A)函数的定义可以嵌套,但函数的调用不可以嵌套
B)函数的定义不可以嵌套,但函数的调用可以嵌套
C)函数的定义和函数的调用均不可以嵌套
D)函数的定义和函数的调用均可以嵌套
二、判断题
1) 函数的参数个数和类型相同,只是返回值不同,这不是重载。
2) 多数运算符可以重载,个别运算符不能重载,运算符重载是通过函数定义实现的。
3) 对单目运算符重载为友员函数时,说明一个形参;重载为成员函数时,不能显式说明形参。
4) 虚函数用virtual关键字说明成员函数。
5) 构造函数说明为虚函数没有意义。
6) 公有成员采用public关键字说明。
7) 友元函数用来说明在类体内的非成员函数,它可以访问类中的所有成员。
8) this指针是系统生成的指向当前被某个成员函数操作对象的指针。
9) 使用运算符new创建的对象,采用delete释放。
10) 对象数组中的元素可以是不同类的对象。
三、阅读以下程序并给出执行结果
1、
#include<iostream>
using namespace std;
class Add
{
private:
int x,y;
public:
Add(int a,int b)
{
x=a; y=b;
cout<<"调用构造函数1"<<endl;
}
Add(Add &p)
{
x=p.x; y=p.y;
cout<<"调用构造函数2"<<endl;
}
~Add()
{
cout<<"调用析构函数"<<endl;
}
int add(){ return x+y; }
};
void main()
{
Add p1(2,3);
Add p2(p1);
cout<<p2.add()<<endl;
}
2、
#include <iostream>
using namespace std;
class Box
{
public:
Box(int,int,int);
int volume( );
private:
int height;
int width;
int length;
};
Box∷Box(int h,int w,int len)
{
height=h;
width=w;
length=len;
}
int Box∷volume( )
{return(height*width*length);
}
int main( )
{Box box1(12,25,30);
cout<<″The volume of box1 is ″<<box1.volume( )<<endl;
Box box2(15,30,21);
cout<<″The volume of box2 is ″<<box2.volume( )<<endl;
return 0;
}
3、
#include<iostream.h>
class Point
{
private:
int X,Y;
public:
Point(int a=0,int b=0){
X=a;Y=b;
cout<<"initializing X="<<X<<",Y="<<Y<<endl;
}
Point(Point &p);
int GetX(){return X;}
int GetY(){return Y;}
void Show(){
cout<<"X="<<X<<",Y="<<Y<<endl;
}
~Point(){
cout<<"delete… "<<X<<","<<Y<<endl;
}
};
Point::Point(Point &p){
cout<<"Copy Initializing "<<p.X<<","<<p.Y<<endl;
X=p.X;
Y=p.Y;
}
void display(Point p){
p.Show();
}
void main(void)
{
Point A(24,116);
cout<<"called display(A)"<<endl;
display(A);
cout<<"out…"<<endl;
}
4、
#include <iostream.h>
class Base
{
private:
int x;
public:
Base(int a)
{
cout<<"constructing Base..."<<endl;
x=a;
}
~Base()
{
cout<<"destructing Base..."<<endl;
}
};
class Myclass
{
private:
int n;
public:
Myclass(int num)
{
n=num;
cout<<"constructing Myclass..."<<endl;
}
~Myclass()
{
cout<<"destructing Myclass..."<<endl;
}
};
class Derive:public Base
{
private:
int y;
Myclass bobj;
public:
Derive(int a,int b,int c):bobj(c),Base(a)
{
cout<<"constructing Derive..."<<endl;
y=b;
}
~Derive()
{
cout<<"destructing Derive..."<<endl;
}
};
void main()
{
Derive dobj(1,2,3);
}
答案
一、选择题
(1) C (2) A (3) A (4) B (5) B
(6) D (7) B (8) A (9) D (10) B
二、判断题
1) 正确;2) 正确;3) 正确;4) 正确;5) 正确;6) 正确;7) 正确;8) 正确;9) 正确;10) 错误;
三、阅读以下程序并给出执行结果
1、
调用构造函数1
调用构造函数2
5
调用析构函数
调用析构函数
2、
The volume of box1 is 9000
The volume of box2 is 9450
3、
initializing X=24,Y=116
called display(A)
Copy Initializing 24,116
X=24,Y=116
delete… 24,116
out…
delete… 24,116
4、
constructing Base...
constructing Myclass...
constructing Derive...
destructing Derive...
destructing Myclass...
destructing Base...