C++ 如何重载C++;对于具有2个变量的对象?
所以我一直都有操作符重载的问题。所以我有一个程序,它有一个名为“重量”的对象,它有两个属性,磅和盎司。我算出了所有其他运算符,但增量运算符一直给我带来麻烦。我试图这样做,但出于某种原因,它不想工作 以下是头文件中的声明(包括2个变量): 成员的职能是:C++ 如何重载C++;对于具有2个变量的对象?,c++,operator-overloading,C++,Operator Overloading,所以我一直都有操作符重载的问题。所以我有一个程序,它有一个名为“重量”的对象,它有两个属性,磅和盎司。我算出了所有其他运算符,但增量运算符一直给我带来麻烦。我试图这样做,但出于某种原因,它不想工作 以下是头文件中的声明(包括2个变量): 成员的职能是: void Weight::operator++(){ 磅+1; 盎司+15; } void Weight::运算符--(){ 磅-1; 盎司-15; } 什么都行 发布的代码有两个问题 当您增加或减少对象的重量时,不清楚会发生什么情况。它的价
void Weight::operator++(){
磅+1;
盎司+15;
}
void Weight::运算符--(){
磅-1;
盎司-15;
}
什么都行 发布的代码有两个问题
对象的重量时,不清楚会发生什么情况。它的价值应该上升/下降一盎司还是一磅
磅+1
,盎司+15
等不会改变对象中的任何内容。它们计算一个值,结果被丢弃void Weight::operator++() {
ounces++;
// If ounces becomes 16, we have to increment pounds by one and set ounces to zero.
if ( ounces == 16 )
{
pounds++;
ounces = 0;
}
// That can also be achieved by using.
// pounds += (ounces / 16);
// ounces = (ounces % 16);
}
另外,重载++
操作符的cannonical实践是返回对对象的引用。因此,您应该使用:
Weight& Weight::operator++() {
ounces++;
// If ounces becomes 16, we have to increment pounds by one and set ounces to zero.
if ( ounces == 16 )
{
pounds++;
ounces = 0;
}
// That can also be achieved by using.
// pounds += (ounces / 16);
// ounces = (ounces % 16);
return *this;
}
您必须以类似方式更新
运算符--
函数。推荐阅读:这与重载增量运算符无关。这是一个关于如何向变量添加内容的基本问题。增量应该是什么?现在你的体重增加了将近2磅。如果按点递增,则很容易。只需增加磅
,而不增加盎司
。如果按盎司增加,则增加盎司
,如果达到16,则将盎司
重置为0,并增加磅
。注:如果我错了,每磅16盎司,好吧。我住在公制国家。@tkausl主要问题与过载无关,但Tilak的返回类型错误,因此迟早会有错误的行为<代码:你第一个错误是认为C++需要适当的分数。没有。如果您使用盎司的总数来存储和计算,一切都会变得更容易。只有为了展示的目的,你才需要把100盎司分成6磅4盎司。剩下的时间里,甚至可能没有一磅单位。
Weight& Weight::operator++() {
ounces++;
// If ounces becomes 16, we have to increment pounds by one and set ounces to zero.
if ( ounces == 16 )
{
pounds++;
ounces = 0;
}
// That can also be achieved by using.
// pounds += (ounces / 16);
// ounces = (ounces % 16);
return *this;
}