簡體   English   中英

C ++前后增量

[英]C++ Pre and Post Increment

我在重載后遞增方法時遇到麻煩。
我的預增值很好。
我也有事前/事后遞減,它們都工作得很好。
增量和減量主體應相似。 唯一的區別應該是++ /-,但是我不確定為什么我的職位增加不會像我的職位減少一樣起作用。

預增量

upDate upDate::operator++() {
   int julian = convertDateToJulian(datePtr[0], datePtr[1], datePtr[2]);
   julian++;
   convertDateToGregorian(julian);
   return (*this);
}

職位增量

upDate upDate::operator++(int num) {
   upDate temp (*this);
   int julian = convertDateToJulian(datePtr[0], datePtr[1], datePtr[2]);
   julian++;
   convertDateToGregorian(julian);
   return temp;
} 

遞減

upDate upDate::operator--(int num) {
   upDate temp(*this);
   int julian = convertDateToJulian(datePtr[0], datePtr[1], datePtr[2]);
   julian--;
   convertDateToGregorian(julian);
   return temp;
}

這是我的主要:

upDate d5(11, 10, 2004);
++d5;
cout << d5 << endl;
cout << "Expected November 11, 2004\n" << endl;

//not working
upDate d6(11, 11, 2004);
d5++;
cout << d6 << endl;
cout << "Expected November 12, 2004\n" << endl;

upDate d11(12, 3, 1992);
d11--;
cout << d11 << endl;
cout << "Expected: December 2, 1992\n" << endl;

輸出為:
//日期最初是2004年11月10日
// ++增量
2004年11月11日
預期:2004年11月11日

//日期最初是2004年11月11日
//增量++
2004年11月11日//輸出不應該是這個
預期:2004年11月12日

//日期最初是1992年12月2日
// decr--
1992年12月1日
預期:1992年12月1日

您的主要內容中有一個錯字:

//not working
upDate d6(11, 11, 2004);
d6++;  // <---- you have d5++;
cout << d6 << endl;
cout << "Expected November 12, 2004\n" << endl;

你有錯字 在此代碼段中

//not working
upDate d6(11, 11, 2004);
d5++;
cout << d6 << endl;
cout << "Expected November 12, 2004\n" << endl;

您將后增量運算符應用於d5

d5++;

但輸出d6

cout << d6 << endl;

d6不變。

還應考慮到預增量運算符的正確聲明是

upDate & upDate::operator++();

那就是運算符應該返回左值。 而操作員返回一個臨時對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM