2008年7月5日星期六

用Class的Virtual Function写的很低级的绘图

是的,很低级……昨晚搞了N久,VC一直报错,但是没看懂哪里错了,后来才在考拉的帮助下发现……原来我把class打成Class……大写了,而CPP会区分大小写……IDE又不会自动转换……汗 —。—!

然后代码大家将就这看……

/**************************************************

** Project:Vitural Function

** File:example.cpp

** Edition:NULL

** Coder:KingsamChen [MDSA Group]

** Last Modify:2008-7-5

**************************************************/

#include <iostream>
using namespace std;
#include "Shape.h"

int main()
{
 char nGet = 0;
 CShape *pSh = NULL;
 CLine Line;
 CTriangle Tri;
 CRectangle Rect;

 while (1)
 {
  cout<<"Welcome to KC's Painting room"<<endl;
  cout<<"If you want to draw a line, press 1"<<endl;
  cout<<"If you want to draw a triangle, press 2"<<endl;
  cout<<"If you want to draw a rectangle, press 3;"<<endl;
  cout<<"If you want to leave, press 0"<<endl;

  cin>>nGet;

  switch(nGet)
  {
   case '0':
    return 0;
    break;

   case '1':
    pSh = &Line;
    break;

   case '2':
    pSh = &Tri;
    break;

   case '3':
    pSh = &Rect;
    break;

   default:
    cout<<"Press error!"<<endl;
    break;
  }

  if (nGet > '0' && nGet < '4')
  {
   pSh->Draw();
  }

 }

 return 0;
}

void CLine::Draw()
{
 cout<<"*******************"<<endl;
}

void CTriangle::Draw()
{
 cout<<"      *     "<<endl;
 cout<<"     * *    "<<endl;
 cout<<"    *   *   "<<endl;
 cout<<"   * * * *  "<<endl<<endl;
}

void CRectangle::Draw()
{
 cout<<" *************** "<<endl;
 cout<<" *             * "<<endl;
 cout<<" *             * "<<endl;
 cout<<" *************** "<<endl<<endl;
}


/**************************************************

** Project:Vitural Function

** File:Shape.h

** Edition:NULL

** Coder:KingsamChen [MDSA Group]

** Last Modify:2008-7-5

**************************************************/

class CShape
{
 public:
  virtual void Draw() = 0; // 定义为纯虚函数
};

class CLine :public CShape  // 直线类
{
 public:
  virtual void Draw();
};

class CTriangle :public CShape
{
 public:
  virtual void Draw();
};

class CRectangle :public CShape
{
 public:
  virtual void Draw();
};


偶然发现CPP对于虚函数很不好的一个地方,当父类的虚函数是public时,子类的虚函数权限即使是private,也给他当作public。我个人猜测,虚函数的权限应该和父类相同,即继承父类的虚函数权限。

如果真是如此的话,那么CPP就应该不允许父类虚函数权限为public的情况下,子类的权限是private

ps:MS C#这时候已经不允许了~

没有评论:

发表评论

1、可以使用<b>、<i>、<a>等Html标志,让评论更有特色...
2、支持OpenID登录,技术达到国际先进水平。但切记,评论内容不代表本站观点!
3、当遇到“连接被重置”、“连接超时”和“此网页无法访问”等而发表不了评论的话,请多刷新几次页面,或迟三分钟后再试;
4、对你的浏览造成不便,站长在此代表全国G.FW工作人员向你鞠躬致歉!!!