2015-06-01 63 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

相关问题