2015-06-01 23 views
0

我必須設計一個類int2d從vector<vector<int>>繼承,所以下面的代碼:什麼構造函數中使用

int main() 
{ 
    int2d t1(4, 3); 

    for(int i = 0; i < 4; i++) 
    { 
     for(int j = 0; j < 3; j++) 
     { 
      t1(i, j) = i + j; 
     } 
    } 

    for(int i = 0; i < 4; i++) 
    { 
     for(int j = 0; j < 3; j++) 
      cout << t1(i, j) << " "; 
     { 
      cout<<endl; 
     } 
    } 
} 

...產生以下結果:

0 1 2 
1 2 3 
2 3 4 
3 4 5 

我已經寫:

class int2d : public vector<vector<int>> { 
public: 
    vector<vector<int>> vec; 
    int a; 
    int b; 

    //vector<int> tmp; 
    //vector<vector<int>> vec(b); 
    int2d(int a, int b) { 

     vector<int> tmp(b); 
     vector<vector<int>> vec(a); 
     for(int i = 0; i < a; i++) { 
      vec.push_back(tmp); 
     } 
    } 

    int2d& operator = (const int2d& X){ 
     if (this == &X) 
      return *this; 
     int2d tmp(X.a, X.b); 
    } 

    int2d& operator = (const int& X){ 
     vec[a][b] = X; 
    } 
}; 

但是我怎樣才能讓t1(i, j) = i + j;編譯和工作?

+3

你必須[重載函數調用操作符](http://www.tutorialspoint.com/cplusplus/function_call_operator_overloading.htm) – user463035818

+5

爲什麼int2d從vector繼承? – rozina

+0

我的代碼dosent工作,我不能編譯它。 –

回答

0

您只需要operator()(std::size_t, std::size_t)也許const和非const重載。

我強烈建議不要從標準容器繼承。只需將標準容器作爲班級中的成員即可。

+0

將構圖與繼承結合使用是我近來一直在學習的難題。 – Carcigenicate

相關問題