版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012 多态性(多态性(PolymorphismPolymorphism)是指一个名字,多种语义;或界面)是指一个名字,多种语义;或界面 相同,多种实现。相同,多种实现。 重载函数是多态性的一种简单形式。重载函数是多态性的一种简单形式。 虚函数允许函数调用与函数体的联系在运行时才进行,称为虚函数允许函数调用与函数体的联系在运行时才进行,称为 动态联编。动态联编。第第9 9章章 虚虚函数与多态性函数与多态性华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 20012200129.1 静态联编静态联编9.2 类指针
2、的关系类指针的关系9.3 虚函数与动态联编虚函数与动态联编9.4 纯虚函数与抽象类纯虚函数与抽象类9.5 虚函数和多态性的应用虚函数和多态性的应用小结小结第第9 9章章 虚函数与多态性虚函数与多态性华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012 联编是指一个程序模块、代码之间互相关联的过程。联编是指一个程序模块、代码之间互相关联的过程。 静态联编,是程序的匹配、连接在编译阶段实现,也称为早期匹配。静态联编,是程序的匹配、连接在编译阶段实现,也称为早期匹配。 重载函数使用静态联编。重载函数使用静态联编。 动态联编是指程序联编推迟到运行时进行,所以又称为晚期联编。
3、动态联编是指程序联编推迟到运行时进行,所以又称为晚期联编。 switch 语句和语句和 if 语句是动态联编的例子。语句是动态联编的例子。9.1 9.1 静态联编静态联编华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 20012200129.1 9.1 静态联编静态联编普通成员函数重载可表达为两种形式:普通成员函数重载可表达为两种形式:1. 在一个类说明中重载在一个类说明中重载例如:例如:void Show ( int , char ) ;void Show ( char * , float ) ;华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 20012200129.
4、1 9.1 静态联编静态联编普通成员函数重载可表达为两种形式:普通成员函数重载可表达为两种形式:1. 在一个类说明中重载在一个类说明中重载例如:例如:void Show ( int , char ); 与与void Show ( char * , float ); 不是同一函数,编译能够区分不是同一函数,编译能够区分2. 基类的成员函数在派生类重载。有基类的成员函数在派生类重载。有 3 种编译区分方法:种编译区分方法:(1)根据参数的特征加以区分)根据参数的特征加以区分华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 20012200129.1 9.1 静态联编静态联编普通成员函数重
5、载可表达为两种形式:普通成员函数重载可表达为两种形式:1. 在一个类说明中重载在一个类说明中重载2. 基类的成员函数在派生类重载。有基类的成员函数在派生类重载。有 3 种编译区分方法:种编译区分方法:(1)根据参数的特征加以区分)根据参数的特征加以区分例如:例如:A : Show ( );有别于有别于B : Show ( );(2)使用)使用“ “ : ”加以区分加以区分华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 20012200129.1 9.1 静态联编静态联编普通成员函数重载可表达为两种形式:普通成员函数重载可表达为两种形式:1. 在一个类说明中重载在一个类说明中重载2.
6、 基类的成员函数在派生类重载。有基类的成员函数在派生类重载。有 3 种编译区分方法:种编译区分方法:(1)根据参数的特征加以区分)根据参数的特征加以区分(2)使用)使用“ “ : ”加以区分加以区分例如:例如:Aobj . Show ( )调用调用A : Show ( )Bobj . Show ( )调用调用B : Show ( )(3)根据类对象加以区分)根据类对象加以区分根据根据this指针类型区分指针类型区分华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012基类指针和派生类指针与
7、基类对象和派生类对象基类指针和派生类指针与基类对象和派生类对象4种可能匹配:种可能匹配: 直接用基类指针引用基类对象;直接用基类指针引用基类对象; 直接用派生类指针引用派生类对象;直接用派生类指针引用派生类对象; 用基类指针引用一个派生类对象;用基类指针引用一个派生类对象; 用派生类指针引用一个基类对象。用派生类指针引用一个基类对象。 9.2 类指针的关系华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012例如:例如:A * p ;/ 指向类型指向类型 A 的对象的指针的对象的指针A A_obj ;/ 类型类型 A 的对象的对象B B_obj ;/ 类型类型 B 的
8、对象的对象p = & A_obj ;/ p 指向类型指向类型 A 的对象的对象p = & B_obj ;/ p 指向类型指向类型 B 的对象,它是的对象,它是 A 的派生类的派生类 利用利用 p,可以通过,可以通过 B_obj 访问所有从访问所有从 A 类继承的元素类继承的元素 , 但不能用但不能用 p访问访问 B 类自定义类自定义的元素的元素 (除非用了显式类型转换)(除非用了显式类型转换)class Aclass B : public A9.2.1 9.2.1 基类指针引用派生类对象基类指针引用派生类对象9.2.1 基类指针引用派生类对象华南理工大学计算机学院华南理工大学计
9、算机学院 周霭如周霭如 2001220012#include#includeusing namespace std ;class A_class char name20 ; public : void put_name( char * s ) strcpy_s( name, s ) ; void show_name() cout name n ; ;class B_class : public A_class char phone_num 20 ; public : void put_phone( char * num ) strcpy_s ( phone_num , num ) ; void
10、 show_phone() cout phone_num put_name( Wang xiao hua ) ; A_p - show_name() ; A_p = & B_obj ; A_p - put_name( Chen ming ) ; A_p - show_name() ; B_obj.put_phone ( 5555_12345678 ); ( ( B_class * ) A_p ) - show_phone() ;例例9-1 9-1 使用基类指针引用派生类对象使用基类指针引用派生类对象 class A_classclass B_class : public A_class
11、9.2.1 基类指针引用派生类对象华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#include#includeusing namespace std ;class A_class char name20 ; public : void put_name( char * s ) strcpy_s( name, s ) ; void show_name() cout name n ; ;class B_class : public A_class char phone_num 20 ; public : void put_phone( char * num )
12、strcpy_s ( phone_num , num ) ; void show_phone() cout phone_num put_name( Wang xiao hua ) ; A_p - show_name() ; A_p = & B_obj ; A_p - put_name( Chen ming ) ; A_p - show_name() ; B_obj.put_phone ( 5555_12345678 ); ( ( B_class * ) A_p ) - show_phone() ;基类指针基类指针class A_classclass B_class : public A
13、_class9.2.1 基类指针引用派生类对象例例9-1 9-1 使用基类指针引用派生类对象使用基类指针引用派生类对象 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#include#includeusing namespace std ;class A_class char name20 ; public : void put_name( char * s ) strcpy_s( name, s ) ; void show_name() cout name n ; ;class B_class : public A_class char phone_num
14、20 ; public : void put_phone( char * num ) strcpy_s ( phone_num , num ) ; void show_phone() cout phone_num put_name( Wang xiao hua ) ; A_p - show_name() ; A_p = & B_obj ; A_p - put_name( Chen ming ) ; A_p - show_name() ; B_obj.put_phone ( 5555_12345678 ); ( ( B_class * ) A_p ) - show_phone() ;基类
15、指针基类指针指向基类对象指向基类对象class A_classclass B_class : public A_class9.2.1 基类指针引用派生类对象例例9-1 9-1 使用基类指针引用派生类对象使用基类指针引用派生类对象 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#include#includeusing namespace std ;class A_class char name20 ; public : void put_name( char * s ) strcpy_s( name, s ) ; void show_name() cout n
16、ame n ; ;class B_class : public A_class char phone_num 20 ; public : void put_phone( char * num ) strcpy_s ( phone_num , num ) ; void show_phone() cout phone_num put_name( Wang xiao hua ) ; A_p - show_name() ; A_p = & B_obj ; A_p - put_name( Chen ming ) ; A_p - show_name() ; B_obj.put_phone ( 55
17、55_12345678 ); ( ( B_class * ) A_p ) - show_phone() ;基类指针基类指针调用基类成员函数调用基类成员函数class A_classclass B_class : public A_class9.2.1 基类指针引用派生类对象例例9-1 9-1 使用基类指针引用派生类对象使用基类指针引用派生类对象 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#include#includeusing namespace std ;class A_class char name20 ; public : void put_nam
18、e( char * s ) strcpy_s( name, s ) ; void show_name() cout name n ; ;class B_class : public A_class char phone_num 20 ; public : void put_phone( char * num ) strcpy_s ( phone_num , num ) ; void show_phone() cout phone_num put_name( Wang xiao hua ) ; A_p - show_name() ; A_p = & B_obj ; A_p - put_n
19、ame( Chen ming ) ; A_p - show_name() ; B_obj.put_phone ( 5555_12345678 ); ( ( B_class * ) A_p ) - show_phone() ;class A_classclass B_class : public A_class基类指针基类指针指向派生类对象指向派生类对象9.2.1 基类指针引用派生类对象例例9-1 9-1 使用基类指针引用派生类对象使用基类指针引用派生类对象 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#include#includeusing namespa
20、ce std ;class A_class char name20 ; public : void put_name( char * s ) strcpy_s( name, s ) ; void show_name() cout name n ; ;class B_class : public A_class char phone_num 20 ; public : void put_phone( char * num ) strcpy_s ( phone_num , num ) ; void show_phone() cout phone_num put_name( Wang xiao hu
21、a ) ; A_p - show_name() ; A_p = & B_obj ; A_p - put_name( Chen ming ) ; A_p - show_name() ; B_obj.put_phone ( 5555_12345678 ); ( ( B_class * ) A_p ) - show_phone() ;class A_classclass B_class : public A_class调用调用从基类继承的成员函数从基类继承的成员函数9.2.1 基类指针引用派生类对象例例9-1 9-1 使用基类指针引用派生类对象使用基类指针引用派生类对象 华南理工大学计算机学
22、院华南理工大学计算机学院 周霭如周霭如 2001220012#include#includeusing namespace std ;class A_class char name20 ; public : void put_name( char * s ) strcpy_s( name, s ) ; void show_name() cout name n ; ;class B_class : public A_class char phone_num 20 ; public : void put_phone( char * num ) strcpy_s ( phone_num , num
23、) ; void show_phone() cout phone_num put_name( Wang xiao hua ) ; A_p - show_name() ; A_p = & B_obj ; A_p - put_name( Chen ming ) ; A_p - show_name() ; B_obj.put_phone ( 5555_12345678 ); ( ( B_class * ) A_p ) - show_phone() ;class A_classclass B_class : public A_class用派生类对象用派生类对象调用派生类的成员函数调用派生类的成
24、员函数9.2.1 基类指针引用派生类对象例例9-1 9-1 使用基类指针引用派生类对象使用基类指针引用派生类对象 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#include#includeusing namespace std ;class A_class char name20 ; public : void put_name( char * s ) strcpy_s( name, s ) ; void show_name() cout name n ; ;class B_class : public A_class char phone_num 20
25、; public : void put_phone( char * num ) strcpy_s ( phone_num , num ) ; void show_phone() cout phone_num put_name( Wang xiao hua ) ; A_p - show_name() ; A_p = & B_obj ; A_p - put_name( Chen ming ) ; A_p - show_name() ; B_obj.put_phone ( 5555_12345678 ); ( ( B_class * ) A_p ) - show_phone() ;class
26、 A_classclass B_class : public A_class对基类指针强类型转换对基类指针强类型转换调用派生类的成员函数调用派生类的成员函数9.2.1 基类指针引用派生类对象例例9-1 9-1 使用基类指针引用派生类对象使用基类指针引用派生类对象 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#include#includeusing namespace std ;class A_class char name20 ; public : void put_name( char * s ) strcpy_s( name, s ) ; void s
27、how_name() cout name n ; ;class B_class : public A_class char phone_num 20 ; public : void put_phone( char * num ) strcpy_s ( phone_num , num ) ; void show_phone() cout phone_num put_name( Wang xiao hua ) ; A_p - show_name() ; A_p = & B_obj ; A_p - put_name( Chen ming ) ; A_p - show_name() ; B_o
28、bj.put_phone ( 5555_12345678 ); ( ( B_class * ) A_p ) - show_phone() ;class A_classclass B_class : public A_class9.2.1 基类指针引用派生类对象例例9-1 9-1 使用基类指针引用派生类对象使用基类指针引用派生类对象 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012 派生类指针只有经过强制类型转换之后,才能派生类指针只有经过强制类型转换之后,才能引用基类对象引用基类对象 9.2.2 9.2.2 派生类指针引用基类对象派生类指针引用基类对象 9.2.
29、2 派生类指针引用基类对象华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#includeusing namespace std ;class Date public: Date( int y, int m, int d ) SetDate( y, m, d ); void SetDate( int y, int m, int d ) year = y ; month = m ; day = d ; void Print() cout year / month / day Print(); cout hours : minutes : seconds n ; p
30、rivate: int hours , minutes , seconds ; ;int main() DateTime dt( 2009, 1, 1, 12, 30, 0 ) ; dt.Print() ; 例例9-2 日期时间程序。在派生类中调用基类日期时间程序。在派生类中调用基类同名成员函数同名成员函数 9.2.2 派生类指针引用基类对象华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#include#includeclass Date public: Date( int y, int m, int d ) SetDate( y, m, d ); void
31、SetDate( int y, int m, int d ) year = y ; month = m ; day = d ; void Print() cout year / month / day Print(); cout hours : minutes : seconds Print();对对 this 指针作类型转换指针作类型转换调用基类成员函数调用基类成员函数 9.2.2 派生类指针引用基类对象例例9-2 日期时间程序。在派生类中调用基类日期时间程序。在派生类中调用基类同名成员函数同名成员函数 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#inc
32、ludeusing namespace std ;class Date public: Date( int y, int m, int d ) SetDate( y, m, d ); void SetDate( int y, int m, int d ) year = y ; month = m ; day = d ; void Print() cout year / month / day Print(); cout hours : minutes : seconds Print();9.2.2 派生类指针引用基类对象例例9-2 日期时间程序。在派生类中调用基类日期时间程序。在派生类中调用基
33、类同名成员函数同名成员函数 对对 this 指针作类型转换指针作类型转换调用基类成员函数调用基类成员函数 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#includeusing namespace std ;class Date public: Date( int y, int m, int d ) SetDate( y, m, d ); void SetDate( int y, int m, int d ) year = y ; month = m ; day = d ; void Print() cout year / month / day ; ; p
34、rotected : int year , month , day ; ;class DateTime : public Date public : DateTime( int y, int m, int d, int h, int mi, int s ) : Date( y, m, d ) SetTime( h, mi, s ); void SetTime( int h, int mi, int s ) hours = h; minutes = mi; seconds = s; void Print() cout hours : minutes : seconds n ; private:
35、int hours , minutes , seconds ; ;int main() DateTime dt( 2009, 1, 1, 12, 30, 0 ) ; dt.Print() ; 9.2.2 派生类指针引用基类对象例例9-2 日期时间程序。在派生类中调用基类日期时间程序。在派生类中调用基类同名成员函数同名成员函数 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012 冠以关键字冠以关键字 virtual 的成员函数称为虚函数的成员函数称为虚函数 实现运行时多态的关键首先是要说
36、明虚函数,另外,必须用实现运行时多态的关键首先是要说明虚函数,另外,必须用 基类指针调用派生类的不同实现版本基类指针调用派生类的不同实现版本9.3 9.3 虚函数和动态联编虚函数和动态联编 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012 基类指针虽然获取派生类对象地址,却只能访问派生类从基基类指针虽然获取派生类对象地址,却只能访问派生类从基类继承的成员类继承的成员9.3.1 9.3.1 虚函数和基类指针虚函数和基类指针9.3.1 虚函数和基类指针华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#includeusing name
37、space std ;class Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: ; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: ; ;class Second_d : public First_d public : Second_d( char xx
38、, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;例例9-3 9-3 演示基类指针的移动演示基类指针的移动 9.3.1 虚函数和基类指针华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#includeus
39、ing namespace std ;class Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: ; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: ; ;class Second_d : public First_d public : Second_d(
40、 char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;ATOENDxyzB_objF_objS_obj9.3.1 虚函数和基类指针例例9-3 9-3 演示基类指针的移动演示基类指针的移动 华南理工大学计算机学院华南理工大学计
41、算机学院 周霭如周霭如 2001220012#includeusing namespace std ;class Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: ; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: ; ;class Second_d : p
42、ublic First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;ATOENDxyzB_objF_objS_objp定义基类指针定义基类指针9.3.1 虚函数和基类指针例例
43、9-3 9-3 演示基类指针的移动演示基类指针的移动 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#includeusing namespace std ;class Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: ; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived clas
44、s: x , y n ; protected: ; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;ATOENDxy
45、zB_objF_objS_objp9.3.1 虚函数和基类指针例例9-3 9-3 演示基类指针的移动演示基类指针的移动 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#includeusing namespace std ;class Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: ; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; v
46、oid who() cout First derived class: x , y n ; protected: ; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( S
47、econd_d * ) p ) - who() ;TOENDxyzB_objF_objS_objp9.3.1 虚函数和基类指针例例9-3 9-3 演示基类指针的移动演示基类指针的移动 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#includeusing namespace std ;class Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: ; ;class First_d : public Base public : First_d(char
48、 xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: ; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ;
49、 p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;ATOENDxyzB_objF_objS_objp9.3.1 虚函数和基类指针例例9-3 9-3 演示基类指针的移动演示基类指针的移动 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#includeusing namespace std ;class Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: ; ;class First_d :
50、public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: ; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_o
51、bj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;AOENDxyzB_objF_objS_objp9.3.1 虚函数和基类指针例例9-3 9-3 演示基类指针的移动演示基类指针的移动 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#includeusing namespace std ;class Base public : Base(char xx) x = xx; void who() cout Base class: x n
52、; protected: ; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: ; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class
53、: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;AOENDxyzB_objF_objS_objp9.3.1 虚函数和基类指针例例9-3 9-3 演示基类指针的移动演示基类指针的移动 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#includeusing namespace std ;class Base public : Base(char xx) x = xx;
54、void who() cout Base class: x n ; protected: ; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: ; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void
55、 who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;ATOENDxyzB_objF_objS_objp9.3.1 虚函数和基类指针例例9-3 9-3 演示基类指针的移动演示基类指针的移动 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#includeusing namespace std ;class Bas
56、e public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: ; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: ; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz )
57、 : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;ATONDxyzB_objF_objS_objp9.3.1 虚函数和基类指针例例9-3 9-3 演示基类指针的移动演示基类指针的移动 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#inclu
58、deusing namespace std ;class Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: ; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: ; ;class Second_d : public First_d public : Secon
59、d_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz; void who() cout Second derived class: x , y , z who() ; p = &F_obj ; p - who() ; p = &S_obj ; p - who() ; F_obj.who() ; ( ( Second_d * ) p ) - who() ;ATOENDxyzB_objF_objS_objpvoid who() cout First derived class: x , y n ; 9.3.1 虚函数
60、和基类指针例例9-3 9-3 演示基类指针的移动演示基类指针的移动 华南理工大学计算机学院华南理工大学计算机学院 周霭如周霭如 2001220012#includeusing namespace std ;class Base public : Base(char xx) x = xx; void who() cout Base class: x n ; protected: ; ;class First_d : public Base public : First_d(char xx, char yy):Base(xx) y = yy; void who() cout First derived class: x , y n ; protected: ; ;class Second_d : public First_d public : Second_d( char xx, char yy, char zz ) : First_d( xx, yy ) z = zz;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025云南西双版纳州勐海县政务服务管理局招聘公益性岗位人员3人考试参考题库及答案解析
- 2025江苏南京古生物所非在编项目聘用人员(劳务派遣)招聘1人(2025年第18期)考试备考题库及答案解析
- 2025下半年广东肇庆市怀集县事业单位招聘16人笔试参考题库及答案解析
- 2025北京十一中关村科学城学校招聘考试参考题库及答案解析
- 2026贵州安顺市某单位招聘派遣制工作人员考试参考题库及答案解析
- 2026年南平市属医疗卫生单位第九届“人才·南平校园行”紧缺急需人才招聘笔试备考试题及答案解析
- 2025河南周口太康县事业单位人才引进19人考试参考题库及答案解析
- 2025江西省赣房投资集团有限公司社会招聘6人考试备考题库及答案解析
- 2025广东广州市黄埔区老人院招聘医生2人考试参考题库及答案解析
- 2025年福建泉州石狮产投教育集团有限公司招聘工作人员1名考试参考题库及答案解析
- 货物运输安全管理制度
- 《电子工业全光网络工程技术规范》
- 3 面粉码垛机器人的结构设计
- 脑梗塞所致精神障碍病人护理
- 护理组长竞聘演讲
- 露天煤矿安全用电培训
- 股骨粗隆间骨折分型培训课件
- 24年一年级上册语文期末复习21天冲刺计划(每日5道题)
- 静疗工作总结
- 2024-2025学年吉安市泰和县六上数学期末综合测试模拟试题含解析
- JJF 1064-2024坐标测量机校准规范
评论
0/150
提交评论