subject_22598.htm
来自「一些关于vc的问答」· HTM 代码 · 共 9 行
HTM
9 行
<p>
序号:22598 发表者:一个苦瓜 发表日期:2002-11-27 00:03:35
<br>主题:怎样解释?
<br>内容:#include "iostream.h"<BR>class CShape<BR>{<BR> public:<BR> void display() {cout<<"Shape"<<endl;}<BR>};<BR>class CEllipse:public CShape<BR>{<BR> public:<BR> void display() {cout<<"Ellipse"<<endl;}<BR>};<BR>class CCircle:public CShape<BR>{<BR> public:<BR> void display() {cout<<"Circle"<<endl;}<BR>};<BR>class CTriangle:public CShape<BR>{ <BR> public:<BR> void display() {cout<<"Triangle"<<endl;}<BR>};<BR>class CRect:public CShape<BR>{<BR> public:<BR> void display() {cout<<"Rect"<<endl;}<BR>};<BR>class CSquare:public CShape<BR>{<BR> public:<BR> void display() {cout<<"Square"<<endl;}<BR>};<BR>void main()<BR>{<BR> CShape aShape;<BR> CEllipse aEllipse;<BR> CCircle aCircle;<BR> CTriangle aTriangle;<BR> CRect aRect;<BR> CSquare aSquare;<BR> CShape* pShape[6]={&aShape,&aEllipse,&aCircle,&aTriangle,&aRect,&aSquare};<BR> for(int i=0;i<6;i++)<BR> pShape[i]->display();<BR> }<BR><BR>程序运行的结果为:aShape<BR> aShape<BR> aShape<BR> aShape<BR> aShape<BR> aShape<BR>怎样解释运行的结果?我知道把display()定义成virtual即可得到预期的结果,现在只想问现在的结果怎样解释?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:John Lan 回复日期:2002-11-27 00:23:30
<br>内容:1, c++编译器绑定c++成员函数时有两种方式,静态和动态,也可以对应叫early-binding<BR> lately-binding<BR>2, 动态绑定要满足两个条件:<BR> 1:通过指针去调用 2:c++类有virtual函数<BR><BR>你的sample只能是静态绑定的例子,即使通过指针去调用成员函数。<BR>所谓静态绑定,即编译器只根据你的对象或者对象指针的类型去绑定函数<BR>不管你这个对象/指针到底是不是真的这种类型。<BR>因为你用pShape call,所以你的6个call都是一样的结果.<BR>2002-11-27 0:24:42
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?