2、定義一個用于表示月份的名為Month的類,具體要求如下:
(1)私有資料成員:
int mon:用于表示月份值(1表示1月,2表示2月,以此類推)
(2)公有成員函式:
Month(string Mon):使用月份英文名稱(前3個字母)來設定月份值
Month(int n):用整數n來設定月份值
void show():輸出函式,根據資料成員mon的值(整型)輸出該月份的英文單詞
Month next():回傳下一個月份物件
(3)在主函式中驗證類的所有成員函式。
(將相關.h檔案和.cpp檔案存入ex2檔案夾中)
謝謝!


uj5u.com熱心網友回復:
基礎問題自己做寫出代碼后覺得有問題再貼出來提問
uj5u.com熱心網友回復:
好的,問題出在了Month next()函式上
uj5u.com熱心網友回復:
#include <iostream>#include <string>using namespace std;class Month{private: int mon;public: Month(string Mon); Month(int n); void show(); Month next();};#include <iostream>#include <string>#include "class.h"using namespace std;Month::Month(string str){ do { if (str == "Jan") { mon = 1; break; } if (str == "Feb") { mon = 2; break; } if (str == "Mar") { mon = 3; break; } if (str == "Apr") { mon = 4; break; } if (str == "May") { mon = 5; break; } if (str == "Jun") { mon = 6; break; } if (str == "Jul") { mon = 7; break; } if (str == "Aug") { mon = 8; break; } if (str == "Sep") { mon = 9; break; } if (str == "Oct") { mon = 10; break; } if (str == "Nov") { mon = 11; break; } if (str == "Dec") { mon = 12; break; } cout << "輸入錯誤!請重新輸入:" << endl; cin >> str; } while (1);}Month::Month(int n){ do { if (n >= 1 && n <= 12) { mon = n; break; } else { cout << "輸入錯誤!請重新輸入:" << endl; cin >> n; } } while
uj5u.com熱心網友回復:
#include <iostream>
#include <string>
using namespace std;
class Month{
private: int mon;
public: Month(string Mon);
Month(int n);
void show();
Month next();
};
#include <iostream>
#include <string>
#include "class.h"
using namespace std;
Month::Month(string str){
do {
if (str == "Jan") { mon = 1; break; }
if (str == "Feb") { mon = 2; break; }
if (str == "Mar") { mon = 3; break; }
if (str == "Apr") { mon = 4; break; }
if (str == "May") { mon = 5; break; }
if (str == "Jun") { mon = 6; break; }
if (str == "Jul") { mon = 7; break; }
if (str == "Aug") { mon = 8; break; }
if (str == "Sep") { mon = 9; break; }
if (str == "Oct") { mon = 10; break; }
if (str == "Nov") { mon = 11; break; }
if (str == "Dec") { mon = 12; break; } cout << "輸入錯誤!請重新輸入:" << endl; cin >> str; }
while (1);}
Month::Month(int n){
do {
if (n >= 1 && n <= 12) {
mon = n; break; }
else {
cout << "輸入錯誤!請重新輸入:" << endl; cin >> n; }
} while (1);
}
void Month::show()
{ while(1) {
if (mon == 1) { cout << "January" << endl; break; }
if (mon == 2) { cout << "February" << endl; break; }
if (mon == 3) { cout << "March" << endl; break; } if (mon == 4) { cout << "April" << endl; break; }
if (mon == 5) { cout << "May" << endl; break; }
if (mon == 6) { cout << "June" << endl; break; }
if (mon == 7) { cout << "July" << endl; break; }
if (mon == 8) { cout << "August" << endl; break; }
if (mon == 9) { cout << "September" << endl; break; }
if (mon == 10) { cout << "October" << endl; break; }
if (mon == 11) { cout << "November" << endl; break; }
if (mon == 12) { cout << "December" << endl; break; }
}
}
Month Month::next(){
if(mon<12) mon = mon + 1;
else mon = 1;
return Month(mon);
}
#include <iostream>
#include <string>
#include "class.h"
using namespace std;
int main(){
Month mon1("Aug");
mon1.show();
mon1.next();
Month mon2(9);
mon2.show();
mon2.next();
system("pause");
return 0;
}
uj5u.com熱心網友回復:
Month Month::next(){int m = mon + 1;
if ( m>12 ) m = 1;
return Month(m);
}
不能直接改mon, 否則自身就變了。
還有,整數和字串之間的裝換,一個的寫也容易出現問題, 應該定一個一個陣列來做
string months[12] = {"Jan", "Feb", ...}. // 簡寫
string fullMonths[12] = {"January", ....} // 全寫
你也可以利用c++的map, 把string和int對應上的方式來實作中間點轉換,避免大量的if 。。。else。。。 等
uj5u.com熱心網友回復:
好的,謝謝大佬!!學到了。謝謝您!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/111580.html
標籤:C++ 語言
上一篇:二項式近似構建高斯卷積核
下一篇:c++
