试题1:从派生类看private成员和protected成员没有区别。(F) 试题2:析构函数可以被显式调用,也可以被系统自动调用。(F)
试题3:构造函数的访问属性可以是public的,但不可以是protected和private。(t) 试题4:基类的protected成员经过protected派生后,在派生类中仍为protected成员。(T) 试题5:构造函数和析构函数都不能为虚函数。(F)
试题6:从外部看类的private成员和protected成员没有区别。(T)
试题7:程序中不能直接调用构造函数,在创建对象时系统自动调用构造函数。(F) 试题8:在类定义中不允许对所定义的数据成员进行初始化。(T) 试题9:析构函数是一个函数体为空的成员函数。(F)
试题10:定义一个对象时,系统只为该对象的数据成员开辟内存空间,而成员函数是同类
对象共享的。( F)
试题1:定义在类体内的成员函数是内联函数,定义在类体外的成员函数不能是内联函数。
(F)
试题2:类中的成员函数是公有的,数据成员都是私有的。(F)
试题3:使用class定义类,其默认访问权限是public;使用struct定义的结构,其默认访问权限是private。(F) 简答题
试题1:什么是析构函数?它们有什么作用?
构造函数主要用于为对象分配空间,进行初始化。构造函数除了具有一般成员函数的特征外,还具有一些特殊的性质:(1)构造函数的名字必须与类名相同(2)构造函数可以有任意类型的参数,但不能指定返回类型。它有隐含的返回值,该值由系统内部使用。(3)构造函数是特殊的成员函数,函数体可写在类体内,也可写在类体外。(4)构造函数可以重载,即一个类中可以定义多个参数个数或参数类型不同的构造函数。(5)构造函数被声明为公有函数,但它不能像其他成员函数那样被显式地调用,它是在定义对象的同时被调用的。
析构函数也是一种特殊的成员函数。它执行与构造函数相反的操作,通常用于撤消对象时的一些清理任务,如释放分配给对象的内存空间等。析构函数有以下一些特点: (1)析构函数与构造函数名字相同,但它前面必须加一个波浪号(~); (2)析构函数没有参数,也没有返回值,而且不能重载。因此在一个类中只能有一个析构函数;(3)当撤消对象时,编译系统会自动地调用析构函数。
试题2:什么是函数的重载?有什么作用?
用同一个函数名定义多个函数、而这些函数的参数个数和参数类型可以不相同。
试题3:什么是构造函数?构造函数的作用是什么?
构造函数,是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
试题4:一个类根据访问权限一般包括几部分?这几部分有什么功能?
私有private权限,公共public权限,受保护protected权限三种。 公用的:既可以被本类中的成员函数所引用,也可以被类的作用域内的其他函数引用;私有的:只能被本类中的成员函数所引用;
受保护的:不能被类外访问,但能被派生类的成员函数引用。
分析类
程序中有错误的地方已用“①-⑤”指出,请分析并写出①到⑤五条出错原因。 #include
x(int a1=0, int b1=0){a=a1; b=b1;} int get1( ) {return a+b;} };
class y : private x { private: int c; public:
y(int a1, int b1, int c1) : x(a1,b1) {c=c1;}
int get2( ) ,return a+b+c;- ←(1) int get3( ) {return c;} };
void main( ) { x x1; y y1; ←(2) y y2(3,4,5);
cout << x1.a <<“\\n”;←(3) x1.get1( );
y1.get1( );←(4) y1.get3( );
cout << y2.c <<“\\n”;←(5) }
编写程序,定义抽象基类Shape(形状),由它派生出2个派生类: Circle(圆形)和Square (正方形),用函数ShowArea()分别显示各种图形的面积。 #include
class Shape//定义抽象基类,仅供继承用 {
virtual void printArea()=0;//纯虚函数 };
class Circle:Shape {
private: double radi; public:
Circle(double ra) {radi=ra;}
void printArea()
{cout<<\圆的面积为:\};
class Rectangle:Shape {
private:
double height; double length; public:
Rectangle(double hei,double len) {height=hei;length=len;} void printArea()
{cout<<\矩形的面积为:\};
void main() {
Circle cir(4);
Rectangle rect(5,4); cir.printArea(); rect.printArea(); }
从类Person中派生出一个教师类Teacher,新增的属性职称(Position),要求为教师类添加相应的方法,完成成员属性的赋值及成员方法,成员方法参照Person类,即输出教师的相关信息。
Person类的设计如下,请将空白处补充完整。 class Person {
public:
char Name[10]; int Age; public:
void Register(char *name,int age){ strcpy(Name,name); Age=age; }
void display(){
cout<
其中,circle类包含半径radius和求圆面积的成员函数getarea(),圆周率用PI 或3.14表示;table类包含桌子高度height和返回高度的成员函数getheight()。roundtable类继承所有上述
类的数据成员和成员函数,添加了数据成员桌子颜色color和相应的成员函数display() 函数,用于输出高度、面积和颜色。 #include
public:
double heigh; char *color; public:
virtual void display()=0;//写成纯虚函数便于重载 };
class circle {
public:
double radius;//半径 public:
virtual void display()=0;//写成纯虚函数便于重载 };
class roundtable : public table,public circle {
public:
void iniroundtable(double h,double r,char *c) {
heigh=h; radius=r; color=c; }
void display() {
cout<<\ cout<<\
cout<<\PI*radius*radius< protected: double heigh,radius; char *color; }; int main() { roundtable t1; t1.iniroundtable(1,2,\t1.display(); return 0; } 定义一个图形类,其中有保护类型的成员数据:都为单精度型,高度m_heigh,宽度m_width和面积m_area,一个公有的构造函数(不带任何参数的构造函数)。由该图形类建立两个派生类:矩形类和等腰三角形类。在每个派生类中都包含两个函数,一个是带两个参数的构造函数,即给高度和宽度初始化,一个是计算面积的函数Area(),分别用来计算矩形和等腰三角形的面积。提示: class pic { }; class recg:public pic { }; class tag:public pic { }; 下列程序的运行结果为(21)。 class I { public: I(int x) { value=x; } I operator++( ); I operator++(int); void show( ) , cout< I I ::operator++( ) { value++; return *this; } I I ::operator++(int) { I temp(*this); value++; return temp; } void main( ) { I n(20); ++(++n); n.show( ); } 下列程序的运行结果为(5 10)。 class B { int a,b; public: B(int aa=0, int bb=0) { a=aa; b=bb; } friend void operator++(B &b );