2016-05-15 74 views
-1

是否有可能超載基本類型像charint有額外的運營商?重載基本數據類型

我試了一下:

bool char::operator[](const int param) { 
    if (param < 8) { 
     return (*this) & std::pow(2, param); 
    } 
    else { 
     exit(13); 
    } 
} 

我想發生: 我希望函數在字符變量的param位置返回該位的值。

發生了什麼: 它不能編譯。錯誤:'bool' followed by 'char' is illegal.

+1

問題。最後回答。是否需要詳細說明。 –

+0

'^'是按位異或運算符。我相信你正在尋找逐字分解(「和」),寫成'&'。 'pow'返回一個浮點值;如果你想計算2到一個小整數的冪,使用左移運算符:1U << param'(或者'1UL << param',如果你期望'param'大於' int'。甚至'1ULL << param' ...) – rici

回答

1

char是基本類型,因此您不能重載其成員運算符,因爲它沒有成員。

此外,operator[]不能被實現爲一個非成員函數。所以在這種情況下,我擔心你運氣不好。

0

你不能重載char或使用「本」,因爲它代表了一個類的實例,但如果你可以創建自己的類焦化物或焦化等..類似於String類,或者你可以寫的方式是什麼列表或堆棧使用您自己的類使用矢量。 Here you go

所以,你可以在帖子的開頭是這樣

class Char{ 
    private: 
     char cx; 
    public: 
     Char(){} 
     Char(char ctmp):cx(ctmp){} 
     Char(Char &tmp):cx(tmp.cx){ } 
     ~Char(){ } 

     char getChar(void){ return this->cx; } 

     // operator implementations here 
     Char& operator = (const Char &tmp) 
     { 
      cx = tmp.cx; 
      return *this; 
     } 
     Char& operator = (char& ctmp){ 
      cx = ctmp; 
      return *this; 
     } 
     bool operator[](const int param) { 
      if (param < 8) { return (*this) & std::pow(2, param); } 
      else { exit(13); } 
     } 
};