一 选择题
1. 对类的构造函数和析构函数描述正确的是__[1]___ 。A<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
A)构造函数可以重载,析构函数不能重载
B)构造函数不能重载,析构函数可以重载
C)构造函数可以重载,析构函数也可以重载
D)构造函数不能重载,析构函数也不能重载
2. 类的析构函数的作用是___[2]___。D
A)一般成员函数 B)类的初始化 C)对象的初始化 D)释放对象
类的析构函数是在类对象被释放的时候自动调用的,它的作用是释放一个对象。在对象删除前,用它来做一些清理工作。
3. 假定MyClass为一个类,则该类的拷贝初始化构造函数的声明语句为___[3]___ 。C
A)MyClass&(MyClass x); B)MyClass(MyClass x)
C)MyClass(MyClass& x); D)MyClass(MyClass *x)
注意:它的形参是一个引用。
4.假定MyClass为一个类,则执行MyClass a,b(2),*p;语句时,自动调用该类构造函数_[4]次。A
A)2 B)<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />3 C)4 D)5
定义指针p并不调用类的构造函数。
5 下面对于友元函数描述正确的是__[5]___。C
A)友元函数的实现必须在类的内部定义
B)友元函数是类的成员函数
C)友元函数破坏了类的封装性和隐藏性
D)友元函数不能访问类的私有成员
友元函数虽然在类的定义中声明,但它不是类的成员函数。
6 在C++中,数据封装要解决的问题是___[6]___。 D
A)数据的规范化 B)便于数据转换
C)避免数据丢失 D)防止不同模块之间数据的非法访问
7 一个类的友元函数或友元类能够通过成员操作符访问该类的____[7]____。D
A)私有成员 B)保护成员 C)公用成员 D)所有成员
类的友元函数对类的属性和方法的访问能力等同与类的成员函数。
9 为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问
权限定义为___[9]____。A
A)public B)protected C)private D)static
10 下面对静态数据成员的描述中,正确的是___[10]___。D
A)静态数据成员可以在类体内进行初始化
B)静态数据成员不可以被类的对象调用
C)静态数据成员不能受private控制符的作用
D)静态数据成员可以直接用类名调用
静态数据成员应该在类体外进行初始化,其初始化与它的访问控制权无关,其访问则受到访问控制权的限制。静态数据成员是所有类对象共享的成员,即可通过类名访问,又可通过对象访问。通过类名访问更方便,更高效
11 下面对静态数据成员的描述中,正确的是__[11]___。A
A)静态数据成员是类的所有对象共享的数据
B)类的每个对象都有自己的静态数据成员
C)类的不同对象有不同的静态数据成员值
D)静态数据成员不能通过类的对象调用
12 对于下面定义的类MyClass,在函数f()中将对象成员n的值修改为50的语句应该
是___[12]___。C
class MyClass
{
public:
MyClass(int x) { n = x;}
void SetNum(int nl){ n =nl; }
private:
int n;
}
int f( )
{
MyClass *ptr = new MyClass(45);
_____________
}
A) MyClass(50) B) SetNum(50) C) ptr->SetNum(50) D) ptr->n = 50
private数据成员不允许被非成员函数直接调用,所以D)错
13
下面是类MyClass的定义,对定义中语句描述正确的是___[13]___。D
class MyClass
{
public:
void MyClass(int a) { X = a; } //①不能有类型void
int f(int a, int b) //②
{
X=a;
Y=b;
}
int f(int a, int b, int c = O) //③不能实现函数重载
{ // 调用f(10,20)时产生二义
X=a;
Y=b;
Z=c;
}
static void g() { X=10; } //④静态成员函数不能操作类的非静态成员
private:
int X, Y, Z;
};
A)语句①是类MyClass的构造函数定义
B)语句②和语句③实现类成员函数的重载
C)语句④实现对类成员变量X的更新操作
D)语句①和④都不正确, ②和③有二义。
二、 填空题
15 在C语言中,编程的单位是__①函数___;在C++语言中,编程的单位是__②类____。
16 类是对具有共同属性和行为的一类事物的抽象描述,共同属性被描述为类中的
__①数据成员___,共同行为被描述为类中的__②成员函数___。
17 类的具体表现是通过定义__对象_____来操作的。
18 对类中的成员函数和属性的访问是通过__①private_、_②protected_和__③public__这3
个关键字来控制的。
19 一般情况下,按照面向对象的要求,把类中的数据成员(属性)定义为__①private ___权
限,而把成员函数(方法)定义为__②public ____权限。
20) 在类定义中,数据和成员函数默认权限是private _________。
21 类中构造函数有__①一个或多个___个,析构函数有__②一个_个。
22 类中的构造函数是一个特殊的成员函数,它由类的对象__①自动___调用,它的作用
是②为对象分配内存空间,为类的数据成员进行初始化并进行一些其它类的内部操作。
23 在定义类的对象时,C++程序将自动调用该对象的_构造_____函数初始化对象自身。
24 在撤销类的对象时,C++程序将自动调用该对象的__析构____函数。
25 __①new___运算符对指定类型对象动态分配内存并返回____②指向该类型对象的指针____。
26 __delete______运算符删除(25)题中的运算符所动态分配的内存空间。
27 假定用户没有给一个名为MyClass的类定义构造函数,则系统为其定义的默认构造
函数形式为MyClass(){ }______。
28 假定用户没有给一个名为MyClass的类定义析构函数,则系统为其定义的默认析构
函数形式为~MyClass() { }______。
29 在类中定义和实现的函数称为_内联函数_______。
30 非成员函数应声明为类的__友元______才能访问这个类的private成员。
31 若要把类FriendClass定义为类MyClass的友元类,则应在类MyClass的定义中加入
语句_ friend class FriendClass _______。
32 若要把函数void FriendFunction()定义为类MyClass的友元函数,则应在类MyClass
的定义中加入语句_ friend void FriendFunction( ) ______。
33
下面的类中定义了一个关于星期的枚举类型,请完成下面的程序。
class MyClass
{
public:
enum Week {Sun,Mon,Tue,Wed,Thur,Fri,Sat };//枚举常量的值分别为:0、1、…
Week week;
}
void fun(MyClass &my)
{
___①my.week ____= __②Wed ____; //将对象my的week赋值为所定义的枚举类型
//值为3的枚举量
}
34 在下面程序的横线处填上适当的语句,使该程序执行结果为10。
#include <iostream.h>
class MyClass
{
public:
___①MyClass(int a){ x=a; }____ //为x置值
___②int GetNum( ){ return x; }____ //取x值
private:
int x;
};
void main()
{
MyClass my(10);
cout << my.GetNum() << endl;
}
35 完成下面的类定义。
class MyClass
{
public:
MyClass( ) { x = 0; }
___①friend ___ int GetNum(__②MyClass ____ my);
private:
int x;
};
int GetNum(__②MyClass ____ my)
{
return my.x;
}
三、编写程序:
1.
定义一个Point类来处理三维点points(x,y,z).该类有一constructor,一copy constructor, 一negate()成员函数将point的x,y和z值各乘-1, 一norm()成员函数返回该点到原点(0,0,0)的距离,一个print()成员函数显示x,y,和z的值。
#include <math.h>
#include <iostream.h>
class Point
{ public:
Point(float x=0, float y=0, float z=0): x_(x), y_(y), z_(z) { }
Point(const Point& p) : x_(p.x_), y_(p.y_), z_(p.z_) { }
void negate() { x_ *= -1; y_ *= -1; z_ *= -1; }
double norm() { return sqrt(x_*x_ + y_*y_ + z_*z_); }
void print()
{ cout << '(' << x_ << "," << y_ << "," << z_ << ")";
}
private:
float x_, y_, z_;
};
void main()
{ Point p(12,-3,4);
cout << "p = ";
p.print();
cout << ", p.norm() = " << p.norm() << endl;
p.negate();
cout << "p = ";
p.print();
cout << ", p.norm() = " << p.norm() << endl;
}
2. 定义一个Person类,它的每个对象表示一个人。数据成员必须包含姓名、出生年份、死亡年份,一个构造函数,一析构函数,读取数据的成员函数,一个print()成员函数显示所有数据。
#include <iostream.h>
class Person
{ public:
Person(char* =0, int =0, int =0);
~Person() { delete [] name_; }
char* name() { return name_; }
int born() { return yob_; }
int died() { return yod_; }
void print();
private:
int len_;
char* name_;
int yob_, yod_;
};
void main()
{ Person cb("Charles Babbage",1792,1871);
cb.print();
}
Person::Person(char* name, int yob, int yod)
: len_(strlen(name)),
name_(new char[len_+1]),
yob_(yob),
yod_(yod)
{ memcpy(name_, name, len_+1);
}
void Person::print()
{ cout << "\tName: " << name_ << endl;
if (yob_) cout << "\tBorn: " << yob_ << endl;
if (yod_) cout << "\tDied: " << yod_ << endl;
}
转载于:https://blog.51cto.com/chc12345/60736