标签:大小 blog containe 数组 结果 tor 列表 需要 tle
参考:http://www.weixueyuan.net/view/6385.html
总结:
需要以类成员函数的形式对函数调用操作符“()”进行重载。
只有常成员函数才能处理常对象,故我们依然在类中提供两个版本的函数调用操作符重载函数。若调用对象为常对象(const),则必须用常函数。
这里面的关于在函数中抛出异常,在调用处捕捉异常,值得参考学习。
#include<iostream> #include<string> using namespace std; class Array { public: Array(){len1 = 0; len2 = 0; num = NULL; }; Array(int m, int n); int & operator()(int, int); const int & operator()(int, int)const; int getlen1()const {return len1;} int getlen2()const {return len2;} private: int len1; int len2; int * num; }; Array::Array(int m, int n) { int size = m * n; try { num = new int[size]; } catch(bad_alloc) { cerr<<"allocate storage failure!"<<endl; throw; } len1 = m; len2 = n; } int & Array::operator()(int i, int j) { if(i < 0 || i >= len1) throw string("1 out of bounds!"); if(j < 0 || j >= len2) throw string("2 out of bounds!"); return num[ i*len2 + j ]; } const int & Array::operator()(int i, int j)const { if(i < 0 || i >= len1) throw string("1 out of bounds!"); if(j < 0 || j >= len2) throw string("2 out of bounds!"); return num[ i*len2 + j ]; } int main() { Array A(3,4); int i,j; for(i = 0; i < A.getlen1(); i++) for(j = 0; j < A.getlen2(); j++) A(i,j) = i * A.getlen2() + j; for(i = 0; i < A.getlen1(); i++) for(j = 0; j < A.getlen2(); j++) cout<< A(i,j)<<" "; cout<<endl; try { cout<< A(5, 3) << endl; } catch(string s) { cerr<< s <<endl; } try { cout<< A(2, 6) << endl; } catch(string s) { cerr<< s <<endl; } return 0; }
标签:大小 blog containe 数组 结果 tor 列表 需要 tle
原文地址:http://www.cnblogs.com/yongpan/p/7803551.html