2.2 继承和派生类 (第二章 C++面向对象程序设计)

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

20、派生类是如何定义的?

答:class classname:access-label base-class

这里access-label是public、protected或private,base-class是已定义的类的名字。

21、派生类的继承方式有哪些?它们各有哪些特点?

答:继承方式有public继承、protected继承、private继承。

1)公有继承:基类公有成员相当于派生类的公有成员;基类保护成员相当于派生类的保护成员;

基类的私有成员,派生类内部成员无法直接访问。

2)私有继承:基类公有成员和保护成员都相当于派生类的私有成员,派生类只能通过自身的成员函数访问它们;基类的私有成员,无论派生类内部成员或派生类的对象都无法直接。

3)保护继承:基类公有成员和保护成员都相当于派生类的保护成员,派生类可以通过自身的成员函数或其子类的成员函数访问它们;基类的私有成员,无论派生类内部成员或派生类的对象都无法直接访问

22、在定义派生类的过程中,如何对基类的数据成员进行初始化?

答:调用基类的初始化函数,或者如果有权限直接访问该数据成员,那就直接赋值初始化。

23、在派生类中能否直接访问基类中的私有成员?在派生类中如何实现访问基类中的私有成员?

答:不能。

为了实现访问基类的私有成员,可以

(1)在类定义体中增加保护段(protected);

(2)将需访问基类私有成员的派生类成员函数声明为基类的友元。

24、什么是虚基类?它的作用如何?

答:在派生类继承基类时,加上一个virtual关键词则为虚基类继承,如:class derive : virtual public base

{ };

作用:当某类的部分或全部直接基类是从另一个基类共同派生而来时,这直接基类中,从上一级基类继承来的成员就拥有相同的名称,派生类的对象的这些同名成员在内存中同时拥有多个拷贝,同一个函数名有多个映射。可以使用作用域分辨符来唯一标识并分别访问它们。也可以将共同基类设置为虚基类,这时从不同的路径继承过来的同名数据成员在内存中只拥有一个拷贝,同一个函数名也只有一个映射。也就是说虚基类解决了同名成员的唯一标识问题。

25、分析一下程序的结果。

程序1:

#include

class A

{

public:

A(int I,int j) { a=i;b=j }

void Offset(int x,int y) { a+=x; b+=y; }

void Display() { cout<<’(’<

int a,b;

}

class B:private A

{

public:

B(int I,int j,int k,int l):A(I,j) { x=k; y=l; }

void Display() { cout<

void Move() {Offset(3,5); }

void Show() { A::Display(); }

private:

int x,y;

};

void main()

{

A e(1,2);

e.Display();

B d(3,4,5,6);

d.Move();

d.Display();

d,Show();

}

运行结果:(1,2)

5,6

(6,9)

程序2:

#include

class CRoot

{

public:

int small;

CRoot() { small=2; }

CRoot(int n;)

void showsmall() { cout<<”small=”<

};

class CDer1:public CRoot

{

public:

CDer(int m):CRoot(m0 {}

};

class CDer2:public CRoot

{

public:

int small;

CRoot2(int n=0) { small=n; }

};

void main()

{

CRoot A;

CDer1 B(3);

CDer2 C;

A.showsmall();

B.showsmall();

C.showsmall();

}

运行结果:small=2

small=3

small=2

26、定义一个人员类CPerson,包括市局成员:姓名、编号、性别和用于输入/输出的成员函数。在此基础上派生出学生类CStudent(增加成绩)和教师类CTeacher(增加教龄),并实现对学生和教师信息的输入/输出。

#include

#include

using namespace std;

class CPerson

{

public:

void set(string na,string num,string gen)

{

name=na;

number=num;

gender=gen;

}

void display()

{

cout << name << " " << number << " " << gender << " "; }

private:

string name;

string number;

string gender;

};

class CStudent: public CPerson

{

public:

void set_score(int a)

{

score = a;

}

void display()

{

CPerson::display();

cout << score;

}

private:

int score;

};

相关文档
最新文档