【C++ Primer】类的多态
上一篇 / 下一篇 2012-07-12 13:17:34 / 个人分类:C++
51Testing软件测试网B"M*kj9^$hS
一、概述51Testing软件测试网Y6`O@0k0U
3C"Hs t-I"M%iciaw,P0 1)接口的多种不同的实现方式即为多态。
;[~(_IJ?eUs051Testing软件测试网 c+v;nq} [2)多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式 运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在C++中都是通过虚函数(Virtual Function) 实现的。
,@K D/w5GE04anC2J-\~0 3)关键点:多态还有个关键之处就是一切用指向基类的指针或引用来操作对象
PIi)|`dsbEI051Testing软件测试网,CH~2B5Q;k|二、示例51Testing软件测试网$tF$jfew
51Testing软件测试网Co Lo4uA1)普通的对象操作方式
s)fo*\r9xRO051Testing软件测试网 O1N!rlRG N,Bl4DJ&@ P8@;VJ0#include <iostream> /m*v1n9R%p"F L0using namespace std; 3Q;~6|ESZgC$xD0class A{ )@zc4WF0public:51Testing软件测试网y;JD8b;_Q void print()51Testing软件测试网Dh3R-X/F$UL&}~ { pKBi7ey ZM0 cout<<"This is A"<<endl; C._s d7t(`4w B0 }51Testing软件测试网Z)nK'ZW%D/Bz h };51Testing软件测试网"^ F5Bs8m\4b\ class B:public A{ C8Xm5^"nD*B b!B/E*D5\#g0public:51Testing软件测试网@0YIAkI@v void print() G6C"G7s0s wJ(^0 {51Testing软件测试网\:j-n0Ld _ cout<<"This is B"<<endl;51Testing软件测试网1TzXl%E`B }51Testing软件测试网 x7M^?)U px }; kS I9a q-e,C3l7N9X0int main(){ //为了在以后便于区分,我这段main()代码叫做main1 k.F%A j%a;O8rq+D,?.T0 A a;51Testing软件测试网.x9Ks&I puU B b; +d3z OL[ S{0 a.print(); N5u_IV%h0 b.print(); bLb _/_w0} |
5U0l*MxhZ I \}}0 输出:This is A
J2T``i'm6`Qjs|[05h,n)s)S4})E(FqS0 This is B
yZ.b6e%T/zDW5\0[YOz+N%hQ+[0 2)按照多态的操作对象方式:通过父类对象来操作子类对象51Testing软件测试网0ynt5D:S9Fn|_.v Y
4]$Z o?gwu|h051Testing软件测试网G#K6v:^ea] sm
#include <iostream> 1R%TmD1jeSn0using namespace std; 1^R+u T?D]5p0f0class A{51Testing软件测试网)K-xHxW%O G public: Y&v2Pt v:M9N`S8T6s8Mf0 void print()51Testing软件测试网)y&T/LT(lA_ Et] { q_4T;VvLN)pS [0 cout<<"This is A"<<endl;51Testing软件测试网z'Sqk#_5PQ } /l)T~VH@&|0};51Testing软件测试网!L&A}Wp/\^ak class B:public A{ -P(dTb$[2t cE0public: 8E5W's*vB{p y(a$z0 void print()51Testing软件测试网Gl1~$iu { e(J8zdYD5~0 cout<<"This is B"<<endl; 2w*p5]F)D)Z$ri3J0 }51Testing软件测试网$c\5{E,e c.MKt }; &ay2j*~;_`#tA0int main(){ //通过父类来操作子类 o"?7s6C-V$TyuH2d0 A a;51Testing软件测试网O4c.ElM @B[ B b; |