2009年6月28日 星期日

測試您對 C&C++ 程式語言的熟悉程度

這支程式是我在講授 C++ 課程時,先搭配講義,說明理論後,在課堂上所實作CODING完成的,整支程式碼,由無到有一行一行撰寫完成,在撰寫的同時一定會講解理論與技巧,讓我這一班的學生都能全聽懂。完成後,我認為此支程式具有一些 C&C++ 程式碼技巧,遂貼上 BLOG 與各位同好分享。


這一小段程式碼以 C++ 的多型技巧為基礎,程式中 Shape 指標物件呼叫 draw 函數,此 draw函數 可以傳入不同形式(種類)參數。 這您有看懂嗎?^^


/*
 * C&C++ Test code
 * Copyright (C) 2009 Yi-Hua, Chiang
 * microcyh@seed.net.tw
 */
#include <stdio.h>
#include <stdlib.h>
struct ReData
{
  int l;
  int w;
  int Area;
};
class Shape
{
public:
 virtual void draw( void *p ){}
 void callDraw(void *p){ draw(p); }
};
class TextDraw : public Shape
{
public:
 void draw(void *p)
 {
  char **pArr = (char **)p;
 
  printf( "%s\r\n", *pArr ); pArr = pArr+1;
  printf( "%s\r\n", *pArr ); pArr = pArr+1;
  printf( "%s\r\n", *pArr );
  printf( "class TextDraw:void draw() O\r\n" );
 }
};
class Rectangle : public Shape
{
public:
 void draw(void *p)
 { 
  struct ReData *RD;
  RD = (struct ReData *)p;
  RD->l =10;
  RD->w =20;
  RD->Area =RD->l * RD->w;
  printf( "class Rectangle:void draw() 口 RD->Area=%d\r\n" , RD->Area );
 }
};
void PolyFun1()
{
  printf( "void PolyFun1()\r\n" );
}
class PolyShape : public Shape
{
public:
 void draw(void *p)
 { 
  void (*ShapeFun)();
  ShapeFun = (void (*)())p;
  (*ShapeFun)();
  printf( "class PolyShape:draw PolyShape\r\n" );
 }
};
int main()

 char *arr[3] = {"Hello", "CYH", "III"};
  TextDraw TDO1; Rectangle RO1; PolyShape PSO1;
  struct ReData SRD1;
 
  Shape* pO1; 
  printf( "======pO1 = &PSO1;============\r\n" );
  pO1 = &PSO1; pO1->draw( (void*)PolyFun1 );
  pO1->callDraw( (void*)PolyFun1 );
  printf( "\n======pO1 = &RO1;============\r\n" );
  pO1 = &RO1; pO1->draw( (void*)&SRD1 );
  printf( "\n======pO1 = &TDO1;============\r\n" );
  pO1 = &TDO1; pO1->draw( (void*)arr );
  system( "PAUSE" );
  return 0;
}


此程式執行結果:


沒有留言:

張貼留言

FPGA Verilog 的學習經驗,提供給要入門的新手

今天簡單說說 FPGA Verilog 的學習經驗,提供給要入門的新手: 1.對自己寫的FPGA Verilog程式,所生成的數位電路要心中有數。 這一點個人認為很重要,就正如寫 C語言,心中要能生成對應的組合語言一樣,我是這樣要求自己的。 雖然 FPGA Verilog語言...