2010C++作业习题和答案
- 格式:doc
- 大小:73.00 KB
- 文档页数:8
1 / 8 《C++程序设计》作业习题和答案
第一部分(第1-7、8、9章)
一、单选题
1、在C++中,关于下列设置缺省参数值的描述中,( B )是正确的。
A.不允许设置缺省参数值;
B.在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;
C.只能在函数的定义中指定参数的缺省值;
D.设置缺省参数值时,必须全部都设置;
2、关于友元函数的描述中,错误的是( B )。
A.友元函数说明在类体内 B.友元函数必须用对象来引用
C.友元函数不是成员函数 D.友元函数可以直接访问类中的私有成员
3、下列关于构造函数的特征的描述中,正确的是( B )。
A. 不可以重载 B. 不说明其类型
C. 与类名不同 D. 不可以设置默认参数
4、下列关键字中,( B )不是类定义中使用的关键字。
A. class B. switch C. public D. private
5、可能具有类型转换功能的构造函数应该是( B )
A. 不带参数的构造函数
B. 带一个参数的构造函数
C. 带两个参数的构造函数
D. 默认构造函数
6、下列关于new运算符的描述中,错误的是( C )。
A. new运算符组成的表达式的值是地址值
B. 用它创建的对象须用delete来删除
C. 创建对象时不调用构造函数
D.可用它来创建动态的对象和对象数组
7、下面选项中,不是类的成员函数为( C )
A. 构造函数
B. 析构造函数
C. 友元函数
D. 缺省参数的构造函数
8、在类定义的外部,可以被访问的成员有( C )。
A. 所有类成员 B.private或protected的类成员
C. public的类成员 D. public 或private的类成员
9、关于静态成员的描述中,( C )是错误的。
A. 静态成员可分为静态数据成员和静态成员函数
B. 静态数据成员初始化不使用其构造函数
C. 静态数据成员定义后必须在类体内进行初始化
D. 静态成员函数中不能直接引用非静态成员
10、下列关于对象引用的描述中,错误的是( C )。
A.对象引用不能作数组元素
B.对象引用可作为函数的参数和返回值
C.定义对象引用时需用同类对象的地址值进行初始化
D.对象引用成员表示与对象相同
二、判断题
1. ∨ 构造函数和析构函数都是系统自动调用的。
2. ∨ 运算符new可以创建变量或对象, 也可以创建数组。
3. ╳ 构造函数和析构函数都可以重载,因为它们都是成员函数。
4. ╳ 友元函数是成员函数,它可以访问类中私有成员。
5. ╳ 子对象的初始化可以不放在该类的构造函数中。 2 / 8 6. ╳ 假定AB为一个类,则执行“AB a[10];”语句时,系统自动调用该类的构造函数的次数为1次。
7. ∨ 类的构造函数具有与其类名相同的名字。
8. ∨ 对象数组的元素必须是同一个类的对象。
9. ╳ 用class定义的类中,默认的访问权限是公有的。
10. ╳ 如果一个类中没有定义任何构造函数,则该类的对象便无法初始化。
三、写出下列程序的输出结果:
1、
#include
#include
class A
{
public:
A(int i=0)
{ a=i+b; }
void Print();
~A()
{ cout<<"Destructor\n"; }
private:
int a;
static int b;
};
void A::Print()
{ cout<<'('<
int A::b=5;
void main()
{
A array[3];
array[0]=A(1);
array[1]=A(3);
A *parr[3];
for(int i=0;i<3;i++)
parr[i]=&array[i];
for(i=0;i<3;i++)
parr[i]->Print();
}
Destructor
Destructor
(6,5)
(8,5)
(5,5)
Destructor
Destructor
Destructor
2、
#include
class Student
{
public:
Student(int i=0,double j=0) 3 / 8 { num=i;score=j; }
void print()
{ cout<
friend void fun(Student &rs);
private:
int num;
double score;
};
void fun(Student &rs)
{ rs.num=1100;
rs.score=80;
rs.print();
}
void main()
{ Student s1(1000,90),s2;
s1.print();
fun(s2);
}
1000,90
1100,80
3、
#include
class Tdate
{ public:
Tdate(int i=2002,int j=11,int k=15);
void Print();
~Tdate()
{ cout<<“Destructor”<
private:
int year,month,day;
};
Tdate::Tdate(int i,int j,int k)
{ year=i;
month=j;
day=k;
cout<<“Cosntructor”<
}
void Tdate::Print()
{ cout<
}
void main()
{ Tdate d1(2008,2,1);
d1.Print();
Tdate d2(d1);
d2.Print();
}
Constructor 1
2008/2/1
2008/2/1 4 / 8 Destructor 1
Destructor 1
4、
#include
class A
{
public:
A(int i=0)
{m=i; cout<<”Constructor called.”<
void Set(int i)
{m=i;}
void Print() const
{cout<
~A()
{cout<<”Destructor called.”<
private:
int m;
}
void main()
{
const int N=5;
A my;
my=N;
my.Print();
}
Constructor called.0
Constructor called.5
Destructor called.5
5
Destructor called.5
第二部分(第10、11、13章)
一、单选题
1、下列对派生类的描述中,( A )是错误的。
A. 基类中成员访问权限继承到派生类中都保持不变。
B. 派生类至少应有一个基类。
C. 一个派生类可以作为另一个派生类的基类。
D. 派生类的成员除了自己定义的成员外,还包含了它的基类成员。
2、假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为( A )。
A. AB operator+(AB & a) B. AB operator+(AB & a , AB & b)
C. operator+(AB a) D. AB & operator+( )
3、派生类的对象对它的哪一类基类成员是可以访问的( A )
A. 公有继承的基类的公有成员
B. 公有继承的基类的保护成员
C. 公有继承的基类的私有成员
D. 保护继承的基类的公有成员
4、下列对运算符重载的描述中,正确的是( D )。
A. 运算符重载可以改变结合性
B. 运算符重载可以改变优先级 5 / 8 C. 运算符重载可以改变操作数的个数
D. 运算符重载不改变优先级和结合性
5、下列函数中,( D )不能重载。
A. 成员函数 B. 非成员函数 C. 构造函数 D. 析构函数
6、关于动态联编的下列描述中,( A )是错误的。
A.动态联编是在编译时确定操作函数的
B.动态联编是以虚函数为基础的
C.动态联编是在继承的前提下的一种多态性
D.动态联编时要求类的继承是公有的
7、关于纯虚函数和抽象类的描述中,错误的是( A )。
A. 抽象类的派生类一定不会再有纯虚函数。
B. 抽象类中一定具有至少有一个纯虚函数。
C. 纯虚函数没有具体实现。
D. 抽象类一般作为基类使用,其纯虚函数的实现由其派生类给出。
8、在下列打开磁盘文件的访问方式常量中,以读方式打开文件时应选用( A )。
A. in B. out C. ate D. app
9、在创建派生类对象时,构造函数的执行顺序是( D )。
A. 对象成员构造函数、基类造函数、派生类本身的构造函数。
B. 派生类本身的构造函数、基类造函数、对象成员构造函数。
C. 基类造函数、派生类本身的构造函数、对象成员构造函数。
D. 基类造函数、对象成员构造函数、派生类本身的构造函数。
10、控制输出格式的控制符中,( D )是设置输出宽度的。
A. ws B. ends C. setfill() D. setw()
二、判断题
1.∨ 基类中私有成员派生类不可直接访问。
2.∨ 公有继承方式下,基类中公有成员和保护成员在派生类中仍然是公有的和保护的。
3.∨ 私有继承方式下,基类中公有成员和保护成员在派生类中都是私有的。
4.∨ 派生类的构造函数中显式或隐含的包含着直接基类的构造函数。
5.╳ 派生类的对象不可以给基类对象赋值。
6.╳ 静态联编是在运行时进行的,动态联编是在编译时进行的。
7. ∨ 派生类的构造函数中应包含直接基类的构造函数。
8.∨ 基类中的保护成员在其派生类中可以访问,而派生类对象不可访问。
9.∨ 抽象类不能定义对象,可以定义对象引用和对象指针。
10.∨ 一个对象在创建时,总是要被初始化的。
三、写出下面程序的输出结果。
1、
#include
class A
{
public:
A(int i,int j)
{a=i;b=j;}
void Move(int x,int y)
{a+=x;b+=y;}
void Show()
{cout<<”(”<