大佬教程收集整理的这篇文章主要介绍了c – 重载“”运算符,结果错误?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Array<T,ROW,COL>& operator=(const Array<T,COL> &rhs) { if (this != &rhs) { // allocate new memory T *newData = new T[ROW * COL]; for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { newData[j*ROW + i] = rhs(i,j); } } data = newData; } return *this; }
这是我的重载运算符:
inline Array<T,COL> &operator+(const Array<T,COL> &rhs) { for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { this->data[j*ROW + i] += rhs(i,j); } } return *this; }
这是一段主要@L_944_5@:
Array<double,10> ten; ten.fill(10.0); // fill with tens Array<double,10> result = ten + ten + ten + ten; std::cout << result << std::endl;
Yeilds:
[0]: 80 [1]: 80 [2]: 80 [3]: 80 [4]: 80 [5]: 80 [6]: 80 [7]: 80 [8]: 80 [9]: 80
这对我没有意义.我认为结果将是40.如果您需要查看它们,我会定义复制和赋值构造函数.
我不明白的是什么?谢谢!
Array<T,COL> operator+(Array<T,COL> lhs,const Array<T,COL> &rhs) { //logic goes here return lhs; }
正如您所看到的,您按值返回并且不修改任何原始参数(第一个按值传递,但是因为您要创建它的副本或函数内的新对象以返回它,传递它值也一样好 – 或者你可以通过const引用传递它.如果你必须保留它作为成员(我写的那个是自由运算符),将其原型化为
Array<T,COL> Array::operator+(const Array<T,COL> &rhs) const;
请注意const限定符,它告诉您(和读者)不修改它.
以上是大佬教程为你收集整理的c – 重载“”运算符,结果错误?全部内容,希望文章能够帮你解决c – 重载“”运算符,结果错误?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。