一个C++的多态和虚函数实例

2014-11-24 03:09:24 · 作者: · 浏览: 2

类的说明:

\

code:< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:java;">#include #include #define PAI 3.1415926 using namespace std; class Shape //抽象类 { public: virtual float area() const //计算面积 { return 0.0; } virtual float volume() const//计算体积 { return 0.0; } virtual void ShapeName() const =0;//纯虚函数 ――形状名 }; //声明点类 class Point: public Shape { public: Point(float =0,float =0); void setPoint(float,float); float getX()const {return x;} float getY()const {return y;} virtual void ShapeName()const { cout<<"Point:"; } friend ostream &operator<< (ostream &,const Point &); protected: float x,y; }; //对点类的函数进行类外定义 Point::Point(float a,float b) { x=a; y=b; } void Point::setPoint(float a,float b) { x=a; y=b; } ostream &operator<<(ostream &output,const Point&b) { output<<"["<


区别静态关联和动态关联:

如果是通过对象名调用虚函数(如point.ShapeName()),在编译阶段就能确定调用的是那一个类的虚函数,所以属于静态关联。

如果是通过基类指针调用虚函数(如pt->volume()),在编译阶段无法从语句本身确定是那一个类的虚函数,只有在运行时,pt指向某一类对象后,才能确定调用的是那一个类的虚函数,故为动态关联。


<script type=" text="" avascript"="">

<script type="text/java script">BAIDU_CLB_fillSlot("771048");
点击复制链接 与好友分享! 回本站首页
<script> function copyToClipBoard(){ var clipBoardContent=document.title + '\r\n' + document.location; clipBoardContent+='\r\n'; window.clipboardData.setData("Text",clipBoardContent); alert("恭喜您!复制成功"); }
分享到: 更多
<script type="text/java script" id="bdshare_js" data="type=tools&uid=12732"> <script type="text/java script" id="bdshell_js"> <script type="text/java script"> var bds_config = {'snsKey':{'tsina':'2386826374','tqq':'5e544a8fdea646c5a5f3967871346eb8'}}; document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js cdnversion=" + Math.ceil(new Date()/3600000)