77范文网 - 专业文章范例文档资料分享平台

第5章 继承与派生(8)

来源:网络收集 时间:2018-11-21 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

int main() { C c1; c1.a=3; c1.display(); }

如果虚基类中定义了带参数的构造函数,而且没有定义默认构造函数,则在其所有派生类(包括直接派生或间接派生的派生类)中,通过构造函数的初始化表对虚基类进行初始化。

#include using namespace std; class N {

public: int a; void display(){cout<<\ N(int i){a=i;} };

class A:virtual public N {

public: int a1; void display(){cout<<\ A(int i):N(i){} };

class B:virtual public N {

public: int a2; void display(){cout<<\ B(int i):N(i){} };

class C:public A,public B {

public: int a3; void display(){cout<<\ C(int i):N(i),A(i),B(i){} };

int main() { C c1(10); c1.a=3; c1.display();

}

下面我们来看一个比较实际的例子

//例5.8 声明一个教师(Teacher)类和一个学生(Student)类,用多重继承的方式声明一个研究生(Graduate)派生类。教师类中包括数据成员name(姓名)、age(年龄)、title(职称)。学生类中包括数据成员name1(姓名)、age(性别)、score(成绩)。在定义派生类对象时给出初始化的数据,然后输出这些数据。 #include #include using namespace std;

class Teacher //声明类Teacher(教师) {

public: //公用成员 Teacher(string nam,int a, string t) //构造函数 {name=nam; age=a; title=t;}

void display( ) //输出教师有关数据 {cout<<\ cout<<\ cout<<\ }

protected: //保护成员

string name; int age; string title; //姓名、年龄、职称 };

class Student //定义类Student(学生) {

public:

Student(string nam,char s,float sco) {

name1=nam; sex=s; score=sco;} //构造函数 void display1( ) //输出学生有关数据 {cout<<\ cout<<\ cout<<\ }

protected: //保护成员

string name1; char sex; float score; //姓名、性别、成绩 };

class Graduate:public Teacher,public Student //声明多重继承的派生类Graduate {public:

Graduate(string nam,int a,char s, string t,float sco,float w): //构造函数 Teacher(nam,a,t),Student(nam,s,sco),wage(w) { }

void show( ) //输出研究生的有关数据 {cout<<\ cout<<\ cout<<\

cout<<\ cout<<\ cout<<\ } private:

float wage; //工资 };

int main( )

{Graduate grad1(\ grad1.show( ); return 0; }

试想一下,如果将类Student中的name1改成name,程序会怎么样?那么在Graduate中的name就会出现二义性。怎么办?那就是定义一个虚基类Person,该类中存放共有的成员。

//例5.9 增加一个虚基类来解决二义性问题 #include #include using namespace std;

class Person {

public: Person(string nam,char s,int a) { name=nam;sex=s;age=a; } protected: string name; char sex; int age; };

class Teacher:virtual public Person //声明类Teacher(教师) {

public: //公用部分 Teacher(string nam,char s,int a, string t):Person(name,s,a) //构造函数 {title=t; }

protected: //保护部分 string title; //职称 };

class Student:virtual public Person //定义类Student(学生) {

public: Student(string nam,char s,int a,float sco):Person(nam,s,a) { score=sco;} //构造函数

protected: //保护部分 float score; //成绩 };

class Graduate:public Teacher,public Student //声明多重继承的派生类Graduate {

public:

Graduate(string nam,int a,char s, string t,float sco,float w): Person(nam,s,a),Teacher(nam,s,a,t),Student(nam,s,a,sco) {wage=w; }

void show( ) //输出研究生的有关数据 {cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ } private:

float wage; //工资 };

int main( )

{Graduate grad1(\ grad1.show( ); return 0; }

阅读以下程序,比较一下虚基类与非虚基类的差别 #include using namespace std; class Base {

public: Base(int i){cout<<\ \};

//============================================= class Derived11:virtual public Base {

public: Derived11(int i,int j):Base(i){cout<<\ \};

//============================================= class Derived12:virtual public Base {

public: Derived12(int i,int j):Base(i){cout<<\ \

};

//============================================== class Derived2:public Derived11,public Derived12 {

public: Derived2(int i,int j,int k,int l,int n):Derived12(k,l),Derived11(i,j),Base(i) { cout<<\ \};

//============================================== int main() { Derived2 obj(1,2,3,4,5); return 0; }

运行结果:Base 1

Derived11 2 Derived12 4 Derived2 5

如果是非虚基类,将以上程序中的红色部分删除,运行结果如下: Base 1

Derived11 2 Base 3

Derived12 4 Derived2 5

Press any key to continue

5.7 基类与派生类的转换

不同类型数据之间在一定条件下可以进行类型的转换,这种不同类型数据之间的自动转换和赋值,称为赋值兼容。

基类与派生类对象之间是否也有赋值兼容的关系?可以的。由于派生类中包含从基类继承的成员,因此可以将派生类的值赋给基类对象,在用到基类对象时可以用子类对象代替。

? 派生类对象可以向基类对象赋值 #include using namespace std; class Point{ int X,Y; public: void setPoint(int x,int y){X=x;Y=y;} int getX(){return X;} int getY(){return Y;} void displayPoint(){cout<

class Rectangle:public Point

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库第5章 继承与派生(8)在线全文阅读。

第5章 继承与派生(8).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/293444.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: