C++勉強中です。課題が出たので質問したいです。よろしくお願いします。
日付のエラー処理を完全にするというもので、
次のような仕様を満たすようにMyDateクラスを修正せよ。というものです。
1.月、日共に初期値は1とする。
2.月、日の状態を出力するメンバ関数print()を追加する。
3.changeDay関数において、monthに入っている値に対応して適切なエラー処理を行う。
4月の時は日は30まで、5月の時は31まで、みたいな感じです。
4.changeMonth関数において、変更しようとする月に対しdayに入っている値が大きすぎる場合、dayを変更後の最後の日に修正するようにする。例えば、5月31日に設定されている時に、changeMonth(2)が呼ばれた時、monthに2を、dayに28を代入する。
5.うるう年は考慮しなくていい。
#include <stdio.h>
class MyDate{
private:
int day, month;
public:
MyDate(int =1, int = 1);
void changeMonth(int); //「月」変更用関数
void changeDay(int); //「日」変更用関数
void print();
};
void MyDate::changeMonth(int argMonth)//メンバ関数(changeMonth)の定義
{
if(argMonth >= 1 && argMonth <= 12){
//1~12のときだけ値を更新
month = argMonth;
}
}
void MyDate::changeDay(int argDay)//メンバ関数(changeDay)の定義
{
//1~31が入力された場合のみ値を更新
if(argDay >= 1 && argDay <= 31){
day = argDay;
}
}
void MyDate::print()
{
if(month = 2 && day > 28){
printf("DATE = %d/%d\n",1,31);
}else if(month = 4,6,9,11 && day > 30){
printf("DATE = %d/%d\n",month-1,31);
}else{
printf("DATE = %d/%d\n",month,day);
}
}
int main(int, char **){
MyDate today;
today.changeDay(30);
today.changeMonth(9);
return 0;
}
途中まで考えたのですが、煮詰まってしまってうまくいきません。
ifは使いますよね?
void MyDate::print()
の所はこれでいいのでしょうか?
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
仕様の2と3を見るに…
>void MyDate::print()
>{
>if(month = 2 && day > 28){
>printf("DATE = %d/%d\n",1,31);
>}else if(month = 4,6,9,11 && day > 30){
> :
MyDate::print()でごにょごにょするのではなく、
changeDay()とchangeMonth()で処理しろ……
ということかと思われますが。
あと、上記のif文の判定式は正しくないです。
if(month = 2 && day > 28)
は…
monthに2を「代入」し、dayが28より大きい場合に真となります。
「monthが2、かつdayが28より大きい」という判定ではないです。
if(month == 2 && day > 28)
と記述していませんから。
if(month = 4,6,9,11 && day > 30)
は…
monthに4を「代入」し、dayが30より大きい場合に真となります。
「monthが4または6または9または11で、dayが30より大きい」を期待されているようでしょうが違います。
もう少し、基礎からやり直した方がいいと思いますが。
No.3
- 回答日時:
質問になっていません。
> 途中まで考えたのですが、
ではその「途中まで」を示してください
> 煮詰まってしまってうまくいきません。
どこで/なにに煮詰まったのですか?
なにが/どううまくいきませんか?
No.1
- 回答日時:
コンストラクタの実体は?
これがないと初期化ができないはずですが。
また、3.と4.の条件はchangeDay関数とchangeMonth関数内の処理を説明しているはずですが、なぜprint関数で処理してるの? しかもやってる処理自体も提示された条件とは違ってるし。
さらに、
> month = 4,6,9,11
これはエラーにはならないでしょうが、あなたが考えている「monthが4,6,9,11のどれかと一致したら」という条件にはなりません。C++のコンマ演算子について調べてみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
ハンドルされていない例外が発...
-
関数の実体定義にヘッダファイ...
-
C++のfor文について
-
typedef enumの使い方を教えて...
-
long型の定数の末尾にLを付ける...
-
C++でboolにintの値を代入する...
-
main.c:7:43: warning: implici...
-
2重定義って??
-
変数の型を定義しなかった場合...
-
void func( void )について
-
【#define】 defineで定義した...
-
構造体を引数とする、クラス間...
-
TCP/IPでのgetsockname()の使い...
-
C++の(左辺値)参照を参照渡し
-
C言語のコンパイルエラー
-
VC6でlong longでエラー?
-
C言語の<ctype.h>のisspace()に...
-
APIENTRY と WINAPI
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
typedef enumの使い方を教えて...
-
C++のfor文について
-
long型の定数の末尾にLを付ける...
-
2重定義って??
-
関数の実体定義にヘッダファイ...
-
main.c:7:43: warning: implici...
-
変数の型を定義しなかった場合...
-
visualstudio C# テキストボッ...
-
ハンドルされていない例外が発...
-
C++でboolにintの値を代入する...
-
enumについて
-
構造体の宣言でエラーが出ます。
-
【#define】 defineで定義した...
-
C++ クラスをメンバにもつクラ...
-
0除算を判定したい
-
構造体の要素すべてに対する四...
-
値を返り値に返すのと参照渡し...
-
namespace定義の使い方
-
GCCで暗黙の型変換の警告を出し...
おすすめ情報