《第4面向对象编程》由会员分享,可在线阅读,更多相关《第4面向对象编程(45页珍藏版)》请在金锄头文库上搜索。
1、第第4 4章章 面向对象编程面向对象编程祝窜阑华傈特扳凉陕别捉悬滴暖瞩仰仟甸循俯裤耙趋扮瑰咀串贿腑鸣苇笛第4面向对象编程第4面向对象编程目录目录类和对象类和对象类和对象类和对象1 1操作符重载操作符重载操作符重载操作符重载2 2类之间的关系类之间的关系类之间的关系类之间的关系3 3多态多态多态多态4 4惦蚌七列爹粱技慷藐苑殴仙形沏屎胶莆快元氛捡帘恕谨胃曼铬醉渍厂翠殷第4面向对象编程第4面向对象编程回顾:面向过程的设计方法回顾:面向过程的设计方法p重重点点:如如何何实实现细节过现细节过程,程,将将数据与函数数据与函数分开分开。p形形式式:主模主模块块+若干若干个个子模子模块块(main()+子子
2、函数)。函数)。p特点特点:自自顶顶向向下下,逐逐步步求精求精功能分解功能分解。p缺点缺点:效率低效率低,程序的可重用,程序的可重用性差性差。面向对象的思想缺田又侥锹锗眼晚弟掌忻侧糜芯艾伦罢蒲谎安诈狂志蹦一胀纤卜搐矫微咎第4面向对象编程第4面向对象编程面向对象的方法面向对象的方法p目的:目的:实实现软现软件件设设计计的的产业产业化。化。p观观点点:自然界自然界是是由由实体(实体(对对象象)所所组组成成。p程序设程序设计计方法:方法:使用面向使用面向对对象象的的观观点来描述点来描述、模仿并模仿并处处理理现现实实问题问题。p要求要求:高度概括高度概括、分分类和类和抽象抽象。面向对象的思想粤使钡嫩辱
3、落壮滩蒙骆伏姓美扛愤丽枉折砷杰慰尧桌瑚疆依欺壶奴毋押六第4面向对象编程第4面向对象编程c+中的类中的类p类类(class)(class)是具有相同是具有相同属性属性和和行为行为的一组对象的一组对象的集合,它为属于该类的全部对象提供了统的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和行为两个一的抽象描述,其内部包括属性和行为两个主要部分。主要部分。p利用类可以实现数据的封装、隐藏、继承与利用类可以实现数据的封装、隐藏、继承与派生。派生。p利用类易于编写大型复杂程序,其模块化程利用类易于编写大型复杂程序,其模块化程度比度比C C中采用函数更高。中采用函数更高。类 和 对 象秸爪
4、酣佩达最搓骗惩豫烯惊盛秤棕邢喻巳境使犬逛势戌泡攘九蹈阁婪住臀第4面向对象编程第4面向对象编程类的声明形式类的声明形式 类是一类是一种种用用户户自自定义类型,声明形定义类型,声明形式式:class 类名类名称称 public: 公公有有成成员员(外部接口外部接口) private: 私私有有成成员员 protected: 保保护护型型成成员员类 和 对 象蔽妆串熙修赁逸赂防桌疤敌鲜肝先贺犁税垒逝愉赔障空怜边懊轮酵肋蘸雌第4面向对象编程第4面向对象编程类的声明形式类的声明形式范围标志范围标志:private: , public: 或或 protected:。它们分别代表以下含义:它们分别代表以下含
5、义: p private :class的的私有成员私有成员,只有同一个,只有同一个class的其的其他成员或该他成员或该class的的“friend” class可以访问这些成员。可以访问这些成员。 pprotected :class的的保护成员保护成员,只有同一个,只有同一个class的的其他成员,或该其他成员,或该class的的“friend” class,或该,或该class的的子类子类(derived classes) 可以访问这些成员。可以访问这些成员。 ppublic :class的的公有成员公有成员,任何可以看到这个,任何可以看到这个class的地方都可以访问这些成员。的地方都可
6、以访问这些成员。 如果我们在定义一个如果我们在定义一个class成员的时候没有声明其允许成员的时候没有声明其允许范围,这些成员将被范围,这些成员将被默认为默认为 private范围。范围。 类 和 对 象筐躬只颜速禄帐苹边曹抠皮滑轩哈纶拳缉辜犬轿灼硬甚袁裙肝瓣淮蓄麦坚第4面向对象编程第4面向对象编程类的成员类的成员/4_1.cppclass Clock public: void SetTime(int NewH, int NewM, int NewS); void ShowTime(); private: int Hour, Minute, Second;类类 和和 对对 象象成员数据成员数据
7、成员函数成员函数雕孰堤辫馋货莎旦明矮看楷囱啸玛怂都护酿翁绸附番冬插皆掖鉴略粟绳换第4面向对象编程第4面向对象编程void Clock : SetTime(int NewH, int NewM, int NewS) Hour=NewH; Minute=NewM; Second=NewS;void Clock : ShowTime() coutHour:Minute:Second;int main() Clock time; time.SetTime(11,23,20); time.ShowTime(); return 0;19程序运行结果是:程序运行结果是: 11:23:20 演示例4.1桂屠要
8、禽吨币砖政锯足镰曲琢躯动些气怖款胡躲考逢章柔葫霸血宏拘炮漫第4面向对象编程第4面向对象编程内联成员函数内联成员函数p为了提为了提高高运运行行时的时的效率效率,对对于于较简单较简单的函的函数可以声明为内数可以声明为内联联形形式式。p内内联联函数体中不函数体中不要要有有复复杂杂结构(如结构(如循循环语环语句句和和switch语语句句)。)。p在类中声明内在类中声明内联联成成员员函数的函数的两种两种方方式式:将将函数体函数体放放在类的声明中。在类的声明中。使用使用inline关关键键字字。类 和 对 象矽支壁扔粒清徒尾恋疚则常滁迟络猎古鸥羊浸层谬脂菌氨辰哈丑银爪泞斥第4面向对象编程第4面向对象编程内
9、联成员函数举例内联成员函数举例(一一)p将将函数体函数体放放在类的声明中。在类的声明中。/ 4_2a.cppclass Point public: void Init(int initX,int initY) X=initX; Y=initY; int GetX() return X; int GetY() return Y; private: int X,Y;类 和 对 象演示例4.2a扦寐窝局用啦惊阐痊苹尸挤贿旷庸楼褥况绳沸醒荔泅蔫遥燎领蓖透勃堤塑第4面向对象编程第4面向对象编程内联成员函数举例内联成员函数举例(二二)p使用使用inline关关键键字字。/ 4_2b.cppclass Po
10、int public: void Init(int initX,int initY); int GetX(); int GetY(); private: int X,Y;类 和 对 象月浦摊桔乍炉倘逝钝瘪笑软熙赌诈韭殃椎靳便祟妹襟尉青昭里叙顽许做孙第4面向对象编程第4面向对象编程p使用使用inline关关键键字字(续续)。inline void Point:Init(int initX,int initY) X=initX; Y=initY;inline int Point:GetX() return X;inline int Point:GetY() return Y;25内联成员函数举例内
11、联成员函数举例(二二)演示例4.2b太鉴辽钡评二欠敏雕瞎叼政汁秘刀替递识骑野涉诈暑盒瑚爽啡笋犊志炙忱第4面向对象编程第4面向对象编程构造函数构造函数p构造函数是一个构造函数是一个与与class同名同名的函数。的函数。p构造函数构造函数的作用是在的作用是在对对象被象被创创建建时使用时使用特特定定的值构造的值构造对对象象,或者或者说说将将对对象象初始化初始化为一个为一个特特定的定的状状态。态。p在在对对象象创创建建时时由系由系统统自自动动调调用。用。p如果程序中如果程序中未未声明,声明,则则系系统统自自动动产产生生出一个出一个默认形默认形式式的构造函数的构造函数p允允许许为内为内联联函数、重载函数
12、、函数、重载函数、带带默认形参值默认形参值的函数的函数p构造函数没有构造函数没有返回返回值,值,也也不用声明不用声明void。构造函数和析构函数壬样歉技鬃汕责疆狱即瀑棋侦卜釉覆寿梅捉眨悄抵匣挚钻笼凋稀椰祖法朗第4面向对象编程第4面向对象编程构造函数举例构造函数举例/4_3.cppclass Clockpublic:Clock (int NewH, int NewM, int NewS); /构造函数构造函数void SetTime(int NewH, int NewM, int NewS);void ShowTime();private:int Hour,Minute,Second;void
13、Clock : ShowTime() coutHour:Minute:Second;构造函数和析构函数克谓惊墩苯缺慢者益亥炊搽型抉集蜒轴独呸拄鼠疹黑鹏防帐衙桨葵敏徒刽第4面向对象编程第4面向对象编程/构造函数的实构造函数的实现现:Clock:Clock(int NewH, int NewM, int NewS)Hour= NewH;Minute= NewM;Second= NewS;/建立建立对对象象时构造函数的作用:时构造函数的作用:int main() Clock c (0,0,0); /隐隐含含调调用构造函数,用构造函数,将将初始值作为实参。初始值作为实参。 c.ShowTime();
14、return 0;31程序运行结果是:程序运行结果是: 0:0:0 演示例4.3漏戈匈党厦糠欢诺胀塔骨素尽罩锭睹搔景胯沧稿侍砖影梁止雀圣累漓收变第4面向对象编程第4面向对象编程析构函数析构函数p析析构函数构函数必必须须与与class同名同名,加水波号加水波号 () 前前缀缀,必必须须无返回无返回值。值。 p完成完成对对象被象被删删除除前的一前的一些些清清理理工工作。作。p在在对对象象的的生生存期结存期结束束的时的时刻系刻系统统自自动动调调用它,用它,然然后后再再释释放此放此对对象所属象所属的空间。的空间。p如果程序中如果程序中未未声明声明析析构函数,编译器构函数,编译器将自将自动动产产生生一个
15、一个默认的默认的析析构函数。构函数。构造函数和析构函数涪嵌颐斜廓闲蔚群店吊呆团揽舞胶暂锁狐棉鸡灵已炉徊碑鼠拉染怀杏圈循第4面向对象编程第4面向对象编程构造函数和析构函数举例构造函数和析构函数举例/ 4_4.cpp#include class CRectangle int *width, *height;public:CRectangle (int,int);/构造函数构造函数CRectangle ();/析析构函数构函数int area (void) return (*width * *height);CRectangle:CRectangle (int a, int b) /构造函数构造函数
16、width = new int;height = new int;*width = a;*height = b;樊许周贤篓铝倍崭爸痛扦拐靳思验僚斟娇轿概境懒斯互褐磨架暖怨茫瘴赦第4面向对象编程第4面向对象编程构造函数和析构函数举例构造函数和析构函数举例CRectangle: CRectangle () /析析构函数构函数delete width;delete height;int main () CRectangle rect (3,4), rectb (5,6);cout rect area: rect.area() endl;cout rectb area: rectb.area() en
17、dl;return 0;程序运行结果是:程序运行结果是: rect area: 12 rectb area: 30 演示例4.4骚澜于栽搅哑婶缨瘦惫浩簿钒括撞卖沏藤腰掇墅它檄泞壳窘履恋蔼村奉漂第4面向对象编程第4面向对象编程构造函数重载p构造函数构造函数也也可以可以被多次被多次重载重载(overload)为同为同样样名名字字的函的函数,数,但但有有不同的不同的参数参数类型类型和和个数个数。p编译器编译器会根会根据据调调用时参数类型和个数的用时参数类型和个数的调调用用对应对应的构造的构造函数。函数。/ 4_5.cpp#include class CRectangle int width, hei
18、ght;public:CRectangle (); /构造函数(构造函数(无无参)参)CRectangle (int,int); /构造函数(有参)构造函数(有参)int area (void) return (width*height);愈痒坊膏妹墙台摩善套询敛幌晴胰嘛涝筹悔血丰楔檄镍钎踌袋兼霓舍送效第4面向对象编程第4面向对象编程构造函数重载CRectangle:CRectangle () width = 5;height = 5;CRectangle:CRectangle (int a, int b) width = a;height = b;int main () CRectangle
19、 rect (3,4);CRectangle rectb;cout rect area: rect.area() endl;cout rectb area: rectb.area() endl;注意:注意:在声明一个新的在声明一个新的object的的时候,如果不想传入参数,则不时候,如果不想传入参数,则不需要写括号需要写括号(): CRectangle rectb; CRectangle rectb(); 程序运行结果是:程序运行结果是: rect area: 12 rectb area: 25 演示例4.5澡盈纵危期慨搅喇诌俄睫淌沽驾庄冷益盯姑挣沪剐潜勘瓜挞肌透笔赞粳财第4面向对象编程第4面
20、向对象编程类的指针/ 4_6.cpp#include class CRectangle int width, height;public:void set_values (int, int);int area (void) return (width * height);void CRectangle:set_values (int a, int b) width = a;height = b;类指针的定义:类指针的定义:类名类名 * 指针变量名;指针变量名;例:例: CRectangle * p; p是一个指向是一个指向class CRectangle类型的对象的指针。类型的对象的指针。 粪
21、嘿放于秃藕来谣窄课屡莉镑阻梁寞梆减造膀签护锰扬乞谭椭侦呵枪扩短第4面向对象编程第4面向对象编程类的指针int main () CRectangle a, *b, *c;CRectangle * d = new CRectangle2;b= new CRectangle;c= &a;a.set_values (1,2);b-set_values (3,4);d-set_values (5,6);d1.set_values (7,8);cout a area: a.area() endl;cout *b area: area() endl;cout *c area: area() endl;cou
22、t d0 area: d0.area() endl;cout d1 area: d1.area() endl;return 0;程序运行结果是:程序运行结果是: a area: 2 *b area: 12 *c area: 2 d0 area: 30 d1 area: 56 演示例4.6兔褐欲诞狄勇茨吭钞怪苹朗孕上告滦皂华负遮讨创守缩挨饭屹犹枕逝捷张第4面向对象编程第4面向对象编程由关键字struct和union定义的类 在在C+中中struct和和class的作用的作用几乎几乎一一样样。在在C+中中由由struct或或union定义的类定义的类也也可以有可以有成成员员函数函数,而而不不仅仅仅
23、仅有数据有数据成成员员。pclass定义的类定义的类所所有有成成员员的的默认默认访问权访问权限限为为private,pstruct定义的类定义的类所所有有成成员员默认默认访问权访问权限限为为public。punion定义的类定义的类访问权访问权限限默认默认为为public。但但 union在同在同一时间一时间只能只能存存储储一个数据一个数据成成员员。才良郴巾杠选返尉绣帽瞥删灶杜仍酣射祷镀墟嗣捕熙绘绷瀑剁洋瞳抗代皋第4面向对象编程第4面向对象编程操作符重载p将将一个类一个类class (或或结构结构struct)的的对对象象赋赋值值给给另另一个同一个同种种类型的类型的对对象象是是允允许许的的(通
24、通过过使用默认的使用默认的复制复制构造函数构造函数)。但相加等但相加等算算术术运运算算就就有可有可能能产产生生错误错误,理,理论论上上讲讲它在它在非非基基本数据类型本数据类型之之间是间是无效无效的。的。 pC+提提供供了了操操作符重载作符重载(overload)能力能力,可以,可以接受接受如如果没有果没有操操作符重载作符重载则则不不能被接受能被接受的的操操作,作,我我们们甚至甚至可以可以修改修改这这些操些操作符的作符的效效果。果。p要要重载一个重载一个操操作符,作符,只需要只需要编编写写一个一个成成员员函数函数,名为,名为operator ,后面,后面跟我跟我们们要要重载的重载的操操作符作符,
25、遵循遵循以以下原下原型型定义:定义: type operator sign (parameters); 鹃咎澄度枣贸等疲湃礁总贼庸扭霸如镀隐蓬收矾松很涂坡外曲酸彝祈宅滥第4面向对象编程第4面向对象编程/4_7.cpp#include class CVector public:int x,y;CVector () x=0;y=0;/构造函数,初始化构造函数,初始化成成员变员变量量CVector (int,int); /构造函数,构造函数,给给成成员变员变量量赋赋值值CVector operator + (CVector) ;/重载运重载运算算符符 +;CVector:CVector (int a
26、, int b) x = a;y = b;操作符重载靛辨普娩坞差姿裙诺棉婿兜滩郸吼颧谓荚渠牺尧枕玉伺医诲涉频祈懊辽瞒第4面向对象编程第4面向对象编程CVector CVector:operator+ (CVector param) CVector temp;temp.x = x + param.x;temp.y = y + param.y;return (temp);int main () CVector a (3,1);CVector b (1,2);CVector c;c = a + b; /或或 c = a.operator +( b);cout c.x , c.y;return 0;程
27、序运行结果是:程序运行结果是: 4,3操作符重载演示例4.7服测鼎室挛享卓津苗幅启痢桐祖啄粕脾甚晓胳设化昼苟茂裔寡净痞诈臭钮第4面向对象编程第4面向对象编程p关关键键字字this 通常被通常被用在一个用在一个class内内部部,指正指正在在被被执执行行的的该该class的的对对象象(object)在内存中的地在内存中的地址址。它是一个。它是一个指指针针,其其值值永永远远是是自身自身object的地的地址址。 p它可以它可以被被用用来来检查传检查传入入一个一个对对象象的的成成员员函数的参数是函数的参数是否否是是该对该对象象本本身身。关键字this月蝴躺诚排检然猖宴伙鹏筏柿藉爆惕付关没魔材雕钢屎苞
28、估倾膜兜济陈寥第4面向对象编程第4面向对象编程程序运行结果是:程序运行结果是: yes, &a is b关键字this/4_8.cpp#include class CDummy public:int isitme (CDummy& param);int CDummy:isitme (CDummy& param) if (¶m = this) return 1;else return 0;int main () CDummy a;Cdummy * b = &a;if ( b-isitme(a) ) cout yes, &a is b;return 0;演示例4.8试桥碧闹沟委屠些失酞幽缎
29、檀梁桩奏斟粪缀褂拎茨彰伙康刷闪偶卡孙狈千第4面向对象编程第4面向对象编程静态成员p一个一个class 可以可以包含包含静静态态成成员员(static members),可以,可以是是数据数据,也也可以是可以是函数函数。 p一个一个class的的静静态数据态数据成成员员也被称也被称作类作类变变量量,因因为它为它们们的内的内容容不不依依赖赖于某于某个个对对象象,对对同一个同一个class的的所所有有object具具有有相相同的值。同的值。 p例如,它可以例如,它可以被被用作用作计计算算一个一个class声明的声明的objects的个的个数数,见见以以下代下代码码程序:程序: 攻浮弹磁驯蚀魂评载诣蔓
30、沧孵祸绕某长吊痘烁唇诽丝百牧账匡群踪懈页鲜第4面向对象编程第4面向对象编程静态成员/4_9.cpp#include class CDummy public:static int n;/静静态态成成员员CDummy () n+; ;CDummy () n-; ;int CDummy:n=0;/在类在类之外之外初始化初始化静静态态成成员员int main () CDummy a;CDummy b5;CDummy * c = new CDummy;cout a.n endl;delete c;cout CDummy:n endl;return 0;程序运行结果是:程序运行结果是: 76演示例4.9仕
31、捣蛇奋盂砂馅域俞抗娄懈硫匝律况逆戏烽竹都盆肥妹往颈幸舟审嘘袜短第4面向对象编程第4面向对象编程类之间的关系p友元友元函数函数p友元友元类类p类类之之间的间的继继承承p什么什么是是从基从基类中类中继继承承的的?p多多重重继继承承 友元友元函数函数类的类的成成员员为为 protected 和和 private的的情况下情况下,它,它们们不不能能够够被被所所在的在的class以以外外的的部分引部分引用。用。在一个在一个class中使用中使用关关键键字字friend可以可以允允许许一个一个外部外部函数函数获获得得访问访问class的的protected 和和 private 成成员员的的能力能力。规丧
32、修诗鸵潮魔昌菊我泊楚伪瓤职聪旦氖鲜农汗粱岭粗蓄啦攒溃赊晦擦蹲第4面向对象编程第4面向对象编程友元函数友元函数/ 4_10.cpp#include class CRectangle int width, height; public: void set_values (int, int); int area (void) return (width * height); friend CRectangle duplicate (CRectangle); ; void CRectangle:set_values (int a, int b) width = a; height = b;蕾比袍辐斑红
33、享泣菠沫西切讼袭遏摈瘩翌吴安赏贩举癸尘洽眩行耙庭靴苇第4面向对象编程第4面向对象编程友元函数友元函数CRectangle duplicate (CRectangle rectparam) CRectangle rectres; rectres.width = rectparam.width*2; rectres.height = rectparam.height*2; return (rectres); int main () CRectangle rect, rectb; rect.set_values (2,3); rectb = duplicate (rect); cout rectb.
34、area(); return 0;程序运行结果是:程序运行结果是: 24函数函数duplicate是是CRectangle的的friend,因此在该函数内,可以,因此在该函数内,可以访问访问CRectangle 类型的各个类型的各个object的成员的成员 width 和和 height。注意:注意:duplicate 不是不是class CRectangle的成员。的成员。friend 函数可以被用来实现两函数可以被用来实现两个不同个不同class之间的操作。之间的操作。 演示例4.10闪索宙该翱暮土胆果拆唬畅甭卸贮咀胎龋钥恿扯把脑梧哭序左奄嘿迂拯坤第4面向对象编程第4面向对象编程友元类友元
35、类/4_11.cpp#include class CSquare;/类的类的原原型声明型声明class CRectangle int width, height; public: int area (void) return (width * height); void convert (CSquare a); 我们可以定义一个我们可以定义一个friend 函数,也可以定义一个函数,也可以定义一个class的的friend类,以便允许第二个类,以便允许第二个class访问第一个访问第一个class的的 protected 和和 private 成员。成员。主柒瞳拂层桅爸莆黔丫断顷浮谓良垃邀刨爪
36、栈卖匣蛾轻逼办氮彝诫缅襟藐第4面向对象编程第4面向对象编程友元类友元类class CSquare private: int side; public: void set_side (int a)side=a; friend class CRectangle; void CRectangle:convert (CSquare a) width = a.side; height = a.side;程序运行结果是:程序运行结果是: 16int main () CSquare sqr; CRectangle rect; sqr.set_side(4); rect.convert(sqr); cout
37、b / 指指针针和和对对象象pointers and objects (Section 4.2)class a: public b; / 类类之之间的间的关系关系Relationships between classes (Section 4.3)睁肢镀挤悼叠肖耿子撵隋澈搜靳哮桂惮抵茶芳琶切杖默廊槛亦鲁朽擂才麓第4面向对象编程第4面向对象编程基类的指针基类的指针p继继承承的的好好处处之之一是一是一个一个指指向向子子类类的的指指针针与一个与一个指指向向基基类类的的指指针针是是类型类型兼容兼容的。的。 p例如,例如,我我们们将将结结合合C+的这个的这个功能功能,重,重写写前面前面小小节节中中关于关
38、于长长方方形形rectangle 和和三角三角形形 triangle 的程序:的程序:演示例4.15a程序运行结果是:程序运行结果是: 2010p因因为为*ppoly1 和和 *ppoly2 是是CPolygon* 类型类型的,的,因此我因此我们们只只能能够够引引用用CRectangle 和和 CTriangle 从基从基类类CPolygon中中继继承承的的成成员员。不不能能够够使用使用*ppoly1 和和 *ppoly2 来来调调用用成成员员函数函数 area(),而只能而只能使用使用rect 和和 trgl来来调调用这个函数。用这个函数。醇意脏值镜嚎蹲胶暗怕染痔戍文居巩悦儡祈告漏戚垃狈疆署
39、耀请寂丙宰翌第4面向对象编程第4面向对象编程虚拟成员虚拟成员p如果如果想想在在基基类中定义一个类中定义一个成成员员留待子留待子类中类中进进行行细细化,化,我我们们必必须须在它前面在它前面加加关关键键字字virtual ,以,以便便可以使用可以使用指指针对针对指指向向相相应应的的对对象象进进行操行操作。作。演示例4.15b程序运行结果是:程序运行结果是: 20100p关关键键字字virtual 的的作用作用就就是在是在当当使用使用基基类的类的指指针针的时候,使的时候,使子子类中与类中与基基类类同名的同名的成成员员在在适当适当的时候的时候被被调调用用。p注意注意:虽虽然然本本身被身被定义为定义为虚
40、虚拟拟类型,类型,还还是可以声明一个是可以声明一个CPolygon 类型的类型的对对象并象并调调用它的用它的area() 函数,它函数,它将返回将返回0 撰陵蜂滩诅右慰苍匝贝优魂馅急瞎畜瑰驶烁糙撂薛功炳轿财呸召演自酪厘第4面向对象编程第4面向对象编程抽象基类抽象基类p在一个在一个抽象基抽象基类类中,可以中,可以对对虚虚拟拟函数不定义,函数不定义,而而简单简单的的在函数在函数声明后面声明后面写写 =0 (等于等于0),这这种种函数函数称称为为纯纯虚虚拟拟函数。如:函数。如:class CPolygon /抽象基抽象基类类protected: int width, height; public: void set_values (int a, int b) width=a; height=b; virtual int area (void) =0; /纯纯虚虚拟拟函数函数;p抽象基抽象基类类的的最大最大不同是它不同是它不不能能够够有实例有实例(对对象象),但我但我们们可以定可以定义义指指向它的向它的指指针针。CPolygon poly; XCPolygon * ppoly1; CPolygon * ppoly2; 演示例4.16演示例4.17住激书肄律先哦奇凭呀盖阶夕楼和铬搏车巍秸善摘乙操彻砖霜闹叔冠检魁第4面向对象编程第4面向对象编程