C++模板的定製二:定製C++類 (轉)

worldblog發表於2007-12-11
C++模板的定製二:定製C++類 (轉)[@more@]

 

C++模板的定製二:定製C++類:namespace prefix = o ns = "urn:schemas--com::office" />

  類别範本的基本語法如下:

  template

  class classname

{

  ……

};

T可以是任何型別,下面我就舉一個類别範本的例子(請大家不要追究這個類子需不需要這樣寫或有沒有意義,記住這只是舉例,我們關心的應該是語言的特性,這才是最重要的,不是嗎?)。

template

class operation

{

public:

  operation(T t1,T t2):_val1(t1),_val2(t2){}

  ~operation(){}

  T plus()

  {

    return _val1+_val2;

  };

  T minus() 

  {

    return _val1-_val2;

  };

  T multiplies() 

  {

    return _val1*_val2;

  };

  T divs()

  {

    return _val1/_val2;

  };

 

private:

  T _val1,_val2;

};

這個類封裝了四則運算,如果T為自定義型別,那麼要求必須過載’+’、’-‘、’*’、’/’運算子。但當你以如下的方式宣告類時,你將會碰到問題,或者你不想此型別有類似的操作。

char szarr1[]="yuankai";

char szarr2[]="winmain";

operation obj2(szarr1,szarr2);

cout<

cout<

怎麼辦,當然是類定製。我們可以定製宣告一個這樣的類來解決這個問題。

class operation

{

public:

  operation(char* t1,char* t2):_val1(t1),_val2(t2){}

  ~operation(){}

 char* plus()

  {

    strcat(_val1,_val2);  //這裡要注意

    return _val1;

  };

  void display()

  {

    cout<<_val1>

    cout<<_val2>

  }

private:

  char *_val1,*_val2;

};

  這樣我們再就可放心如下使用operation類了。

  char szarr1[]="yuankai";

  char szarr2[]="winmain";

  operation obj1(1,5);

  operation obj2(szarr1,szarr2);

  cout<

  obj2.display();

  cout<

cout<

由些可見類别範本定製可以給我們充分的控制權,就象冷酸靈牙膏廣告說的一樣,想怎用(吃)就怎麼用(吃)。不是嗎?哈哈……

瞭解定製函式模板使我們在使用C++類時有更大的靈活性,給我們更大更自由的空間。

  文章寫的倉促,有錯別字或錯誤請大家多批評指出。歡迎和大家交流。如果大家覺的還可以我會繼續寫下出(-----袁凱-----)。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991349/,如需轉載,請註明出處,否則將追究法律責任。

相關文章