[工学]程序设计与问题求解Ⅱ.ppt

上传人(卖家):三亚风情 文档编号:3368539 上传时间:2022-08-24 格式:PPT 页数:69 大小:873.62KB
下载 相关 举报
[工学]程序设计与问题求解Ⅱ.ppt_第1页
第1页 / 共69页
[工学]程序设计与问题求解Ⅱ.ppt_第2页
第2页 / 共69页
[工学]程序设计与问题求解Ⅱ.ppt_第3页
第3页 / 共69页
[工学]程序设计与问题求解Ⅱ.ppt_第4页
第4页 / 共69页
[工学]程序设计与问题求解Ⅱ.ppt_第5页
第5页 / 共69页
点击查看更多>>
资源描述

1、程序设计与问题求解程序设计与问题求解第第5章章 继承继承与派生与派生2012.2.21程序设计与问题求解2本章主要内容本章主要内容类的继承与派生类的继承与派生派生类派生类派生类的继承方式与访问属性派生类的继承方式与访问属性派生类的构造函数和析构函数派生类的构造函数和析构函数多继承多继承赋值兼容原则赋值兼容原则程序设计与问题求解3继承与派生问题继承与派生问题客观世界中概念的层次结构客观世界中概念的层次结构交通工具交通工具汽车汽车小汽车小汽车大卡车大卡车大客车大客车面包车面包车轿车轿车越野车越野车火车火车飞机飞机轮船轮船视角:从下往上看,保持已有的特性视角:从下往上看,保持已有的特性继承继承视角:

2、从上往下看,增加了新的特性视角:从上往下看,增加了新的特性派生派生继继承承派派生生程序设计与问题求解4继承与派生问题举例(继承与派生问题举例(1)圆圆矩形矩形几何形状几何形状程序设计与问题求解5继承与派生问题举例(继承与派生问题举例(2)猴子猴子狮子虎猎豹猫猫鸟鸟动物动物程序设计与问题求解6类的继承与派生(类的继承与派生(1)类的层次结构类的层次结构 类的类的继承继承:一个新类从原有的类那里获得其已有的特性:一个新类从原有的类那里获得其已有的特性 类的类的派生派生:从已有的类产生一个新的类:从已有的类产生一个新的类 基类基类(父类):派生新类的类(父类):派生新类的类 派生类派生类(子类):从

3、基类派生而成的类(子类):从基类派生而成的类学生类学生类研究生研究生基类基类派生类派生类2派生类派生类1中学生中学生大学生大学生小学生小学生高中生高中生初中生初中生硕士生硕士生博士生博士生程序设计与问题求解7类的继承与派生(类的继承与派生(2)基类和派生类:构成类的层次关系基类和派生类:构成类的层次关系w 单派生:派生一个子类的类单派生:派生一个子类的类w 多派生:派生多个子类的类多派生:派生多个子类的类学生类学生类研究生研究生基类基类派生类派生类2派生类派生类1中学生中学生大学生大学生小学生小学生高中生高中生初中生初中生硕士生硕士生博士生博士生例如上图:例如上图:单派生:大学生派生研究生。单

4、派生:大学生派生研究生。多派生:除了一个单派生其余的都是多派生。多派生:除了一个单派生其余的都是多派生。多派生多派生程序设计与问题求解8类的继承与派生(类的继承与派生(3)基类和派生类:构成类的层次关系基类和派生类:构成类的层次关系w 单继承:仅从一个基类派生而成的类单继承:仅从一个基类派生而成的类w 多继承:从多个基类派生而成的类多继承:从多个基类派生而成的类派生类派生类在职研究生在职研究生教师教师职员职员研究生研究生在职人员在职人员基类基类2基类基类1在面向对象程序设计中使用继承和派生有什么好处?在面向对象程序设计中使用继承和派生有什么好处?如何使用?如何使用?多继承多继承例如上图:例如上

5、图:单继承:教师和职员都是单继承,只有一个父类。单继承:教师和职员都是单继承,只有一个父类。多继承:在职研究生就是多继承,有两个父类。多继承:在职研究生就是多继承,有两个父类。程序设计与问题求解9类的继承与派生(类的继承与派生(4)class Person /人的基本信息人的基本信息char Name20;char Sex;int Age;public:voidRegister(char*name,char sex,int age)strcpy(Name,name);Sex=(sex=m?m:f);Age=age;voidShowMe()cout Name t Sex t Age endl;程

6、序设计与问题求解10类的继承与派生(类的继承与派生(5)class Student /学生类学生类char Name20;char Sex;int Age;int Number;/学号学号char ClassName10;/班级班级public:void RegisterStu(char*name,int sex,char age,int number,char*classname)strcpy(Name,name);Sex=(sex=m?m:f);Age=age;Number=number;strcpy(ClassName,classname);void ShowStu()cout Name

7、 t Sex t Age endl;cout Number t ClassName endl;从这个例子我们能发现什么?从这个例子我们能发现什么?能否利用已有的代码?能否利用已有的代码?程序设计与问题求解11类的继承与派生(类的继承与派生(6)class Student:public Person/公有继承公有继承int Number;/学号学号char ClassName10;/班级班级public:void RegisterStu(char*name,int sex,char age,int number,char*classname)Register(name,sex,age);/直接调

8、用基类的公有成员直接调用基类的公有成员Number=number;strcpy(ClassName,classname);void ShowStu()ShowMe();/直接调用基类的公有成员直接调用基类的公有成员cout Number t ClassName endl;继承与派生:继承与派生:Student是派生类,是派生类,Person是基类是基类继承已有的特性,派生新的特性继承已有的特性,派生新的特性程序设计与问题求解12继承的目的:保持已有的特性,实现代码继承的目的:保持已有的特性,实现代码重用。重用。派生的目的:增加新的特性,适应新的需派生的目的:增加新的特性,适应新的需要。要。类的

9、继承:类的继承:保留已有保留已有的数据成员和成员函的数据成员和成员函数数类的派生:类的派生:增加新的增加新的数据成员和成员函数数据成员和成员函数类的继承与派生(类的继承与派生(7)在面向对象程序设计中如何使用继承和派生?在面向对象程序设计中如何使用继承和派生?程序设计与问题求解13派生类的定义格式派生类的定义格式class 派生类名派生类名:继承方式:继承方式 基类名基类名 新增成员声明;新增成员声明;;继承方式继承方式w 公有继承(公有继承(public)w 私有继承(私有继承(private)w 保护继承(保护继承(protected)派生类定义派生类定义程序设计与问题求解14派生类对象结

10、构派生类对象结构class A int a,b;class B:public A int c;基类基类A对象对象子类子类B对象对象abcab基类部分基类部分子类增加部分子类增加部分派生类对象中总是含有基类对象(即含有基类的派生类对象中总是含有基类对象(即含有基类的数据成员),其空间总是不小于基类对象。数据成员),其空间总是不小于基类对象。程序设计与问题求解15类的成员访问属性有三种:类的成员访问属性有三种:public(公有)、公有)、private(私有)和私有)和protected(保护)。保护)。w 在类内,非静态成员函数可以访问类中的所有成员。在类内,非静态成员函数可以访问类中的所有成

11、员。w 在类外,通过类的在类外,通过类的“对象对象.成员成员”方式只能访问该类的方式只能访问该类的公有成员公有成员。类的继承方式有三种:类的继承方式有三种:public(公有(公有继承继承)、)、private(私有继承私有继承)和和protected(保护继承保护继承)。在派生类中继承来的成员访问属性是什么?继承在派生类中继承来的成员访问属性是什么?继承来的成员是不是都可以直接访问?来的成员是不是都可以直接访问?派生类的继承方式和访问属性(派生类的继承方式和访问属性(1)程序设计与问题求解16基类成基类成员的访员的访问属性问属性继承方式继承方式publicprotectedprivatepu

12、blic在派生类中为在派生类中为public在派生类中为在派生类中为protected在派生类中为在派生类中为private派生类的成员函数和类的派生类的成员函数和类的作用域之外,都可以直接作用域之外,都可以直接访问访问派生类的成员函数可以直派生类的成员函数可以直接访问接访问派生类的成员函数可以直派生类的成员函数可以直接访问接访问protected在派生类中为在派生类中为protected在派生类中为在派生类中为protected在派生类中为在派生类中为private派生类的成员函数可以直派生类的成员函数可以直接访问接访问派生类的成员函数可以直派生类的成员函数可以直接访问接访问派生类的成员函数

13、可以直派生类的成员函数可以直接访问接访问private在派生类中被隔离,在派生类中被隔离,不可不可以直接访问以直接访问在派生类中被隔离,在派生类中被隔离,不可不可以直接访问以直接访问在派生类中被隔离,在派生类中被隔离,不可不可以直接访问以直接访问任何方式都不能直接访问,任何方式都不能直接访问,但可以通过基类的但可以通过基类的public、protected成员函数成员函数间接访间接访问问任何方式都不能直接访问,任何方式都不能直接访问,但可以通过基类的但可以通过基类的public、protected成员函数成员函数间接访间接访问问任何方式都不能直接访问,任何方式都不能直接访问,但可以通过基类的但

14、可以通过基类的public、protected成员函数成员函数间接访间接访问问继承方式下的访问权限继承方式下的访问权限程序设计与问题求解17派生类的继承方式和访问属性(派生类的继承方式和访问属性(2)public(公有(公有继承继承)class Personchar Name20;char Sex;int Age;public:void Register(char*name,char sex,int age)strcpy(Name,name);Sex=(sex=m?m:f);Age=age;void ShowMe()cout Name t Sex t Age endl;class Studen

15、t:public Person/公有继承公有继承int Number;/学号学号char ClassName10;/班级班级public:void RegisterStu(char*name,int sex,char age,int number,char*classname)Register(name,sex,age);Age=age;Number=number;strcpy(ClassName,classname);void ShowStu()ShowMe();cout Number t ClassName endl;程序设计与问题求解18派生类的继承方式和访问属性(续)派生类的继承方式和

16、访问属性(续)public(公有(公有继承继承)int main()Student stu;/定义一个对象定义一个对象stu.RegisterStu(张弓长张弓长,m,18,85071011,计算机计算机51);/本类本类中的公有成员函数中的公有成员函数stu.Age=18;/基类的私有数据成员基类的私有数据成员stu.Number=110012315;/本类中的私有数据成员本类中的私有数据成员stu.ShowStu();/本类中的公有成员函数本类中的公有成员函数stu.ShowMe();/基类的,成为派生类的公有成员函数基类的,成为派生类的公有成员函数return 0;程序设计与问题求解19

17、派生类的继承方式和访问属性(续)派生类的继承方式和访问属性(续)public(公有(公有继承继承)class Personprotected:char Name20;char Sex;int Age;public:void Register(char*name,char sex,int age)strcpy(Name,name);Sex=(sex=m?m:f);Age=age;void ShowMe()cout Name t Sex t Age endl;class Student:public Person/公有继承公有继承int Number;/学号学号char ClassName10;/

18、班级班级public:void RegisterStu(char*name,int sex,char age,int number,char*classname)Register(name,sex,age);Age=age;Number=number;strcpy(ClassName,classname);void ShowStu()ShowMe();cout Number t ClassName endl;程序设计与问题求解20派生类的继承方式和访问属性(派生类的继承方式和访问属性(3)protected(保护(保护继承继承)class Personchar Name20;char Sex;

19、int Age;public:void Register(char*name,char sex,int age)strcpy(Name,name);Sex=(sex=m?m:f);Age=age;void ShowMe()cout Name t Sex t Age endl;class Student:protected Person/保护继承保护继承int Number;/学号学号char ClassName10;/班级班级public:void RegisterStu(char*name,int sex,char age,int number,char*classname)Register

20、(name,sex,age);Age=age;Number=number;strcpy(ClassName,classname);void ShowStu()ShowMe();cout Number t ClassName endl;程序设计与问题求解21派生类的继承方式和访问属性(续)派生类的继承方式和访问属性(续)protected(保护(保护继承继承)int main()Student stu;stu.RegisterStu(张弓长张弓长,m,18,85071011,计算机计算机51);stu.Age=18;/基类的私有数据成员基类的私有数据成员stu.ShowStu();stu.Sho

21、wMe();/成为派生类的保护成员成为派生类的保护成员return 0;程序设计与问题求解22派生类的继承方式和访问属性(续)派生类的继承方式和访问属性(续)protected(保护(保护继承继承)class Personprotected:char Name20;char Sex;int Age;public:void Register(char*name,char sex,int age)strcpy(Name,name);Sex=(sex=m?m:f);Age=age;void ShowMe()cout Name t Sex t Age endl;class Student:protec

22、ted Person/保护继承保护继承int Number;/学号学号char ClassName10;/班级班级public:void RegisterStu(char*name,int sex,char age,int number,char*classname)Register(name,sex,age);Age=age;Number=number;strcpy(ClassName,classname);void ShowStu()ShowMe();cout Number t ClassName endl;程序设计与问题求解23派生类的继承方式和访问属性(派生类的继承方式和访问属性(4)

23、private(私有(私有继承继承)class Personchar Name20;char Sex;int Age;public:void Register(char*name,char sex,int age)strcpy(Name,name);Sex=(sex=m?m:f);Age=age;void ShowMe()cout Name t Sex t Age endl;class Student:private Person/私有继承私有继承int Number;/学号学号char ClassName10;/班级班级public:void RegisterStu(char*name,in

24、t sex,char age,int number,char*classname)Register(name,sex,age);Age=age;Number=number;strcpy(ClassName,classname);void ShowStu()ShowMe();cout Number t ClassName endl;程序设计与问题求解24派生类的继承方式和访问属性(续)派生类的继承方式和访问属性(续)private(私有(私有继承继承)int main()Student stu;stu.RegisterStu(张弓长张弓长,m,18,85071011,计算机计算机51);stu.

25、Age=18;stu.ShowStu();stu.ShowMe();/成为派生类的私有成员成为派生类的私有成员return 0;程序设计与问题求解25在派生类中在派生类中w 不管什么继承方式,只能访问父类的公有成员不管什么继承方式,只能访问父类的公有成员和保护成员,和保护成员,不能访问父类的私有成员。不能访问父类的私有成员。在派生类外,通过派生类对象在派生类外,通过派生类对象w 不管什么继承方式,不管什么继承方式,只能访问公有成员只能访问公有成员(包括(包括新增的和继承的),不能访问保护成员和私有新增的和继承的),不能访问保护成员和私有成员(包括新增的和继承的)。成员(包括新增的和继承的)。小

26、结小结程序设计与问题求解26class Base private:int a;void f()couta;protected:int b;void g()coutb;public:int c;void k()coutc;class Sub:public Base public:void test()a=1;f();b=2;g();c=3;k();void main()Sub d;d.a=1;d.f();d.b=2;d.g();d.c=3;d.k();练习练习1程序设计与问题求解27class Base private:int a;void f()couta;protected:int b;vo

27、id g()coutb;public:int c;void k()coutc;class Sub:protected Base public:void test()a=1;f();b=2;g();c=3;k();void main()Sub d;d.a=1;d.f();d.b=2;d.g();d.c=3;d.k();练习练习2程序设计与问题求解28class Base private:int a;void f()couta;protected:int b;void g()coutb;public:int c;void k()coutc;class Sub:private Base public

28、:void test()a=1;f();b=2;g();c=3;k();int main()Sub d;d.a=1;d.f();d.b=2;d.g();d.c=3;d.k();练习练习3protected继承继承与与private继承的区别?继承的区别?程序设计与问题求解29class A int myPrivate;protected:int myProtected;public:int myPublic;class B1:protected Avoid SetNum()myProtected=1;myPublic=1;class C1:public B1void SetNum()myPro

29、tected=1;myPublic=1;class B2:private Avoid SetNum()myProtected=1;myPublic=1;class C2:public B2void SetNum()myProtected=1;myPublic=1;多层派生(多层派生(1)AB1C1B2C2程序设计与问题求解30不管有多少层派生,对某一个派生类来说不管有多少层派生,对某一个派生类来说w 派生类中继承成员的访问属性:只由其在派生类中继承成员的访问属性:只由其在直接直接父类父类的访问属性和继承方式确定。的访问属性和继承方式确定。w 派生类中新增成员的访问属性:由其在类中的派生类中新增

30、成员的访问属性:由其在类中的定义确定。定义确定。多层派生(多层派生(2)程序设计与问题求解31基类的构造函数和析构函数都不能被继承基类的构造函数和析构函数都不能被继承,派生,派生类中需要声明自己的构造函数和析构函数。类中需要声明自己的构造函数和析构函数。在设计派生类的构造函数时候,不仅要考虑派生在设计派生类的构造函数时候,不仅要考虑派生类所新增的数据成员初始化,还要考虑基类的数类所新增的数据成员初始化,还要考虑基类的数据成员初始化。据成员初始化。声明构造函数时,除了对本类中新增成员进行初声明构造函数时,除了对本类中新增成员进行初始化外,对继承来的基类成员的初始化,需用初始化外,对继承来的基类成

31、员的初始化,需用初始化列表始化列表调用基类构造函数调用基类构造函数完成。完成。派生类的构造函数(派生类的构造函数(1)程序设计与问题求解32派生类构造函数的一般形式派生类构造函数的一般形式派生类名(总参数表):基类名派生类名(总参数表):基类名1 1(参数表(参数表1 1),基类名),基类名2 2(参数表(参数表2 2),对象成员名,对象成员名1 1(对象参数表(对象参数表1 1),对象成),对象成员名员名2 2(对象参数表(对象参数表2 2),派生类中新增数据成员的初始化派生类中新增数据成员的初始化有三种数据要考虑初始化:有三种数据要考虑初始化:w 基类中的数据成员初始化基类中的数据成员初始

32、化基类构造函数基类构造函数w 本类中的对象成员初始化本类中的对象成员初始化相应类的构造函数相应类的构造函数w 本类中新增的数据成员本类中新增的数据成员函数体函数体派生类的构造函数(派生类的构造函数(2)程序设计与问题求解33派生类构造函数说明:派生类构造函数说明:w 总参数表总参数表:包括派生类中新增加的数据成员,以及全:包括派生类中新增加的数据成员,以及全部基类和全部对象成员的所有参数。部基类和全部对象成员的所有参数。w 如果基类中没有定义构造函数如果基类中没有定义构造函数,或定义了没有参数的,或定义了没有参数的构造函数(默认构造函数),则在初始化列表中可略构造函数(默认构造函数),则在初始

33、化列表中可略去去“基类名(参数表)基类名(参数表)”。此时,若派生类及对象成。此时,若派生类及对象成员都不需初始化,则可以不定义派生类的构造函数。员都不需初始化,则可以不定义派生类的构造函数。w 如果基类中定义的构造函数带参数如果基类中定义的构造函数带参数,则必须定义派生,则必须定义派生类构造函数,并通过初始化列表传递参数。类构造函数,并通过初始化列表传递参数。w 如果基类中既定义无参的构造函数,又定义了有参的如果基类中既定义无参的构造函数,又定义了有参的构造函数,构造函数,在定义派生类构造函数时,既可以包含基在定义派生类构造函数时,既可以包含基类构造函数及其参数,也可以不包含基类构造函数。类

34、构造函数及其参数,也可以不包含基类构造函数。派生类的构造函数(派生类的构造函数(3)程序设计与问题求解34派生类的构造函数(派生类的构造函数(4)派生类默认构造函数派生类默认构造函数w 如果没有定义构造函数,则会调用默认的无参如果没有定义构造函数,则会调用默认的无参构造函数。构造函数。w 派生类的默认构造函数首先会调用父类的无参派生类的默认构造函数首先会调用父类的无参构造函数(如果父类定义了有参构造函数,又构造函数(如果父类定义了有参构造函数,又没有重载无参构造函数,则编译错误)。没有重载无参构造函数,则编译错误)。w 如果父类的上面还有父类,则依次类推。如果父类的上面还有父类,则依次类推。程

35、序设计与问题求解35派生类构造函数执行次序:派生类构造函数执行次序:w 调用基类构造函数,调用顺序按照被声明时的调用基类构造函数,调用顺序按照被声明时的顺序顺序w 调用对象成员构造函数,调用顺序按照被声明调用对象成员构造函数,调用顺序按照被声明时的顺序时的顺序w 执行派生类构造函数体执行派生类构造函数体派生类的构造函数(派生类的构造函数(5)程序设计与问题求解36析构函数也不被继承,派生类需自行声明。析构函数也不被继承,派生类需自行声明。w 声明方法与一般(无继承关系时)类的析构函数相同。声明方法与一般(无继承关系时)类的析构函数相同。不需要显式地调用基类的析构函数,系统会自动不需要显式地调用

36、基类的析构函数,系统会自动隐式调用。隐式调用。析构函数的调用次序与构造函数相反。析构函数的调用次序与构造函数相反。派生类的析构函数派生类的析构函数调用构造函数的次序:调用构造函数的次序:基类对象成员派生类基类对象成员派生类调用析构函数的次序:调用析构函数的次序:程序设计与问题求解37#include#includeclass Person char Name10;/姓名姓名intAge;/年龄年龄public:Person(char*name,int age)strcpy(Name,name);Age=age;coutconstructor of personNameendl;Person()

37、coutdeconstrutor of personNameendl;class Student:public Personchar ClassName10;/班级班级Person Monitor;/班长班长,对象成员对象成员public:Student(char*name,int age,char*classname,char*name1,int age1):Person(name,age),Monitor(name1,age1)strcpy(ClassName,classname);coutconstructor of Student endl;Student()coutdeconstru

38、cor of Student endl;int main()Student stu(张弓长张弓长,18,计算机计算机51,李木子李木子,20);return 0;程序设计与问题求解38#include#include using namespace std;class Studentpublic:Student(int n,string nam)num=n;name=nam;void display()coutnum:numendl;coutname:nameendl;protected:int num;string name;class Student1:public Studentpubl

39、ic:Student1(int n,string nam,int n1,string nam1,int a,string ad):Student(n,nam),monitor(n1,nam1)age=a;addr=ad;void show()coutThis student is:endl;display();coutage:ageendl;coutaddress:addrendl;void show_monitor()coutendlClass monitor is:endl;monitor.display();private:Student monitor;int age;string a

40、ddr;int main()Student1 stud1(10010,Wang-li,1001,Liu-xiang,19,115 Beijing Road,Shanghai);stud1.show();stud1.show_monitor();return 0;程序设计与问题求解39多层派生时的构造函数多层派生时的构造函数#include#include using namespace std;class Student public:Student(int n,string nam)num=n;name=nam;coutconstructor of Student;coutnum:num n

41、ame:nameendl;protected:int num;string name;class Student1:public Studentpublic:Student1(int n,string nam,int a):Student(n,nam)age=a;coutconstructor of Student1 age:ageendl;private:int age;class Student2:public Student1public:Student2(int n,string nam,int a,int s):Student1(n,nam,a)score=s;coutconstru

42、ctor of Student2 score:scoreendl;private:int score;int main()Student2 stud(10010,Li,17,89);return 0;程序设计与问题求解40多层派生时的构造函数(续)多层派生时的构造函数(续)先初始化先初始化Student的数据成员的数据成员num和和name再初始化再初始化Student1的数据成员的数据成员age最后再初始化最后再初始化Student2的数据成员的数据成员score有有多层派生多层派生时,每一层派生类的构造函数,不需时,每一层派生类的构造函数,不需要列出其上面所有各层派生类的构造函数,要列出其

43、上面所有各层派生类的构造函数,只需只需写出直接父类的构造函数即可写出直接父类的构造函数即可。程序设计与问题求解41派生类的拷贝构造函数派生类的拷贝构造函数拷贝构造与构造函数的方式类似:拷贝构造与构造函数的方式类似:w 派生类若自定义拷贝构造函数派生类若自定义拷贝构造函数,则派生类对象,则派生类对象在拷贝创建时先调用父类的拷贝构造函数,再在拷贝创建时先调用父类的拷贝构造函数,再调用派生类拷贝构造函数完成自己的拷贝。调用派生类拷贝构造函数完成自己的拷贝。w 若基类没有定义拷贝构造函数若基类没有定义拷贝构造函数,则派生类对象,则派生类对象在拷贝创建中调用基类默认的拷贝构造函数。在拷贝创建中调用基类默

44、认的拷贝构造函数。w 派生类若没有定义拷贝构造函数派生类若没有定义拷贝构造函数,则派生类对,则派生类对象在拷贝创建时先调用父类的默认拷贝构造函象在拷贝创建时先调用父类的默认拷贝构造函数,再调用派生类默认拷贝构造函数。数,再调用派生类默认拷贝构造函数。程序设计与问题求解42继承与派生结构:继承与派生结构:w 单派生:一个基类派生出一个派生类单派生:一个基类派生出一个派生类w 多派生:一个基类派生出多个不同的派生类多派生:一个基类派生出多个不同的派生类w 多层派生:派生类又作为基类,继续派生新的多层派生:派生类又作为基类,继续派生新的类类w 单继承:派生类只从一个基类派生单继承:派生类只从一个基类

45、派生w 多(重)继承:派生类从多个基类派生多(重)继承:派生类从多个基类派生继承与派生结构继承与派生结构程序设计与问题求解43多派生多派生#include#include using namespace std;class Personprotected:char Name10;char Sex;int Age;public:void Register(char*name,int age,char sex)strcpy(Name,name);Sex=(sex=m?m:f);Age=age;void ShowMe()cout 姓名:姓名:Nameendl;cout 性别:性别:(Sex=m?男男

46、:女女)endl;cout 年龄:年龄:Ageendl;class Teacher:public Personchar Dept20;int Salary;public:Teacher(char*name,int age,char sex,char*dept,int salary);void ShowMe()Person:ShowMe();cout 工作单位:工作单位:Deptendl;cout 月薪:月薪:Salaryendlendl;Teacher:Teacher(char*name,int age,char sex,char*dept,int salary)Register(name,a

47、ge,sex);strcpy(Dept,dept);Salary=salary;程序设计与问题求解44多派生(续)多派生(续)class Student:public Personchar ID12;char Class12;public:Student(char*name,int age,char sex,char*id,char*classid);void ShowMe()cout 学号:学号:IDendl;Person:ShowMe();cout 班级:班级:Classn;Student:Student(char*name,int age,char sex,char*id,char*cl

48、assid)Register(name,age,sex);strcpy(ID,id);strcpy(Class,classid);int main()Teacher teach1(章立早章立早,38,m,计算机学院计算机学院,2300);Student std1(李木子李木子,22,f,02035003,信管信管01);teach1.ShowMe();std1.ShowMe();return 0;程序设计与问题求解45单继承单继承/Point.h文件文件 Point类的声明类的声明#ifndef POINT_H#define POINT_Hclass Pointint x,y;/点的点的x和和

49、y坐标坐标public:Point(int=0,int=0);void SetPoint(int,int);/设设置坐标置坐标int GetX()return x;/取取x坐坐标标int GetY()return y;/取取y坐坐标标void Print();/输出点的坐标输出点的坐标;#endif/Point.cpp文件文件 Point类的成员类的成员函数定义函数定义#include using namespace std;#include point.hPoint:Point(int a,int b)SetPoint(a,b);void Point:SetPoint(int a,int b

50、)x=a;y=b;void Point:Print()cout x ,y ;程序设计与问题求解46单继承(续)单继承(续)/Circle.h文件文件 Circle类的声明类的声明#ifndef CIRCLE_H#define CIRCLE_H#include using namespace std;#include point.hclass Circle:public Pointdouble radius;public:Circle(int x=0,int y=0,double r=0.0);void SetRadius(double);/设设置半径置半径double GetRadius();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文([工学]程序设计与问题求解Ⅱ.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|