CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

侯俊杰深入浅出MFC》中的一个问题?

楼主hgz25251325()2006-07-02 09:42:06 在 C/C++ / C++ 语言 提问

书中的一段代码如下:  
  #include   <iostream.h>  
  class   CShape  
  {  
  private:  
  int   m_color;  
  public:    
  void   setcolor(int   color)  
  {  
  m_color=color;  
  }  
    virtual   void   display()  
  {  
  cout<<"CShape\n";  
  }  
  };  
  class   CRect   :   public   CShape  
  {  
  public:  
    void   display()  
  {  
  cout<<"CRect\n";  
  }  
  };  
  class   Ctriamgle   :   public   CShape  
  {  
  public:  
      void   display()  
  {  
  cout<<"Ctriamgle\n";  
  }  
  };  
  class   CEllipse   :   public   CShape  
  {  
  public:  
    void   display()  
  {  
  cout<<"CEllipse\n";  
  }  
  };  
   
  class   CCircle   :   public   CEllipse  
  {  
  public:  
    void   display()  
  {  
  cout<<"CCircle\n";  
  }  
  };  
  class   CSquare   :   public   CRect  
  {  
  public:  
    void   display()  
  {  
  cout<<"CSquare\n";  
  }  
  };  
   
  void   main()  
  {  
  CCircle   circle;  
  CEllipse   ellipse;  
  CRect   rect;  
  CShape   shape;  
  CSquare   square;  
  Ctriamgle   triamgle;  
   
  CShape     *Shape[6]={&circle,&ellipse,&rect,&shape,&square,&triamgle  
  };  
   
  for(int   i=0;i<6;i++)  
  {  
  Shape[i]->display();  
  }  
  }  
  运行的结果为:  
  CCircle  
  CEllipse  
  CRect  
  CShape  
  CSquare  
  Ctriamgle  
  Press   any   key   to   continue  
   
  但是我将main()中的代码变为如下时:  
  void   main()  
  {  
  CCircle   circle;  
  CEllipse   ellipse;  
  CRect   rect;  
  CShape   shape;  
  CSquare   square;  
  Ctriamgle   triamgle;  
   
  CShape     Shape[6]={circle,ellipse,rect,shape,square,triamgle  
  };  
   
  for(int   i=0;i<6;i++)  
  {  
  Shape[i].display();  
  }  
  }  
  运行结果为  
  CShape  
  CShape  
  CShape  
  CShape  
  CShape  
  CShape  
  Press   any   key   to   continue  
  结果   怎么不一样??  
   
  问题点数:20、回复次数:5Top

1 楼triace_zhang(『雪梨码头』)回复于 2006-07-02 09:52:25 得分 5

Lipperman在C++   Primer里说的很清楚了,C++虽然号称面向对象语言,但讽刺的是多态和虚函数只在使用指针或引用的情况下才起作用。你的  
  CShape     Shape[6]={circle,ellipse,rect,shape,square,triamgle  
  };  
  里面全是对象实例,用实例调用虚函数当然没有用.Top

2 楼du51(郁郁思扬)回复于 2006-07-02 09:53:25 得分 5

那本书足以回答这个问题.你仔细看.(注意一下this指针和vptr)Top

3 楼winks(少爷)回复于 2006-07-02 10:44:57 得分 5

//from     triace_zhang(『雪梨码头』)     :  
  Lipperman在C++   Primer里说的很清楚了,C++虽然号称面向对象语言,但讽刺的是多态和虚函数只在使用指针或引用的情况下才起作用。  
   
  呵呵Top

4 楼jixingzhong(瞌睡虫·星辰)回复于 2006-07-02 12:20:08 得分 5

呵呵,实例访问成员,  
  实际上就是显式调用成员函数,  
  多态是不起作用的   ....  
   
  以指针方式才有效...Top

5 楼fdimim(猿莫求愚√))回复于 2006-07-02 13:21:32 得分 0

有收获,所以不要给我分Top

相关问题

关键词

得分解答快速导航

  • 帖主:hgz25251325
  • triace_zhang
  • du51
  • winks
  • jixingzhong

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo