= 重载不起作用
= overloading doesn't work
#include"stdafx.h"
#include<iostream>
class Item
{
int exponent;
double coefficient; //two private members
public:
//constructor
Item(int exp = 0, int coef = 0) :exponent(exp), coefficient(coef) {}
Item(Item& item) {
exponent = item.exponent;
coefficient = item.coefficient;
} //copy constructor
//interface to change private member exponent
void change_exp(const int n) {
Item::exponent = n;
}
//interface to change private member coefficient
void change_coef(const double n) {
Item::coefficient = n;
}
int get_exp() { return exponent; }// interface to get exponent
double get_coef() { return coefficient; }// interface to get coefficient
~Item() {}
Item operator=(Item item2) {
change_exp(item2.get_exp());
change_coef(item2.get_coef());
return (*this);
}
Item operator*(Item & item2) {
Item result;
result.change_coef(coefficient * item2.get_coef());
result.change_exp(exponent + item2.get_exp());
return result;
}
};
int main() {
Item test(2, 7);
Item test2(4, 5);
Item result;
result = test * test2; //BUG!!!
return 0;
}
错误出现在注释为 BUG 的行上错误 C2679 二进制"=":未找到采用类型为"Item"的右侧操作数的运算符(或者没有可接受的转换(
当我只分配一个对象时,例如 结果=测试;没事。我不知道我的=重载函数哪里出了问题。请帮忙...
您需要
将复制构造函数声明为 Item(const Item& item)
。
test * test2
的结果是一个没有地址的临时右值,因此您无法创建对它的(左值(引用。但是,允许创建常量引用。
此问题和答案可能会产生与此主题相关的更多信息:C++:对右值的常量引用
你的代码有很多问题。
-
首先,您应该尊重访问器和突变器方法等命名约定。您应该将访问器方法命名为 setExp 而不是 change_exp。
-
其次,你应该知道什么时候重载赋值运算符之类的东西(请在 C++ 中谷歌大三(。基本上,如果您只有基元类型的字段,则不必重载赋值运算符。
-
最后,您必须尽可能使用 const 限定符。例如,在访问器方法的末尾,在复制构造器的参数前面等。
复制构造函数应如下所示
Item(const Item& item) {
exponent = item.exponent;
coefficient = item.coefficient;
}
您的分配运算符应如下所示
Item& operator=(const Item& item2) {
change_exp(item2.get_exp());
change_coef(item2.get_coef());
return (*this);
}
字段系数的访问器方法如下所示
double getCoefficient() const { return coefficient; }// interface to get coefficient
相关文章:
- 重载运算符 (<<) cout 在 c ++ 中不起作用,当我互相减去两个矩阵时不起作用
- 为什么重载运算符>在参数声明 const 时不起作用?
- 重载"+="运算符:c+=a_times_b 有效,但 c+=a*b 不起作用?
- = 重载不起作用
- 类中的重载函数(Students())是输出输入的信息,但它不起作用
- 为什么 SFINAE 在这个简单的成员函数重载中不起作用
- C++ 运算符重载 += 有效,但<<不起作用
- 需要使用 Book* 头变量重载运算符,但不起作用
- C++ 运算符删除重载对派生类不起作用
- 为什么重载运算符上的异常说明符'<<'不适用于任何 std::ostream 对象,但对库中定义的运算符不起作用?
- 运算符重载如何工作,为什么在我的情况下不起作用?
- 为什么重载运算符不起作用?
- 重载'='不起作用
- 二叉搜索树<<运算符重载不起作用
- 重载运算符<<不起作用
- 重新赋值在运算符中不起作用 = 重载
- 类构造函数重载不起作用
- c++中的函数重载不起作用
- 为什么 [] 的重载函数在这里不起作用?
- 如果重载函数仅被部分重写,则多态性不起作用