#include <iostream>
using namespace std;
class Fraction {
private:
int num;
int denom;
public:
Fraction() {
num = 0;
denom = 1;
}
Fraction(const Fraction& ref) {
num = ref.num;
denom = ref.denom;
}
Fraction(int arg) {
num = arg;
denom = 1;
}
Fraction(int arg, int arg2) {
num = arg;
if (arg2 == 0)
denom = 1;
else
denom = arg2;
}
~Fraction() {
}
void setnum(int arg) {
num = arg;
return;
}
void setdenom(int arg) {
if(arg) {
denom = arg;
} else {
denom = 1;
}
return;
}
int getnum() const {
return num;
}
int getdenom() const {
return denom;
}
};
int main() {
menu();
return 0;
}
Fraction::Fraction add(Fraction& arg1, Fraction& arg2) {
Fraction temp;
temp.setnum((arg1.getnum() * arg2.getdenom()) + (arg1.getdenom() * arg2.getnum()));
temp.setdenom(arg1.getdenom() * arg2.getdenom());
return temp;
}
Fraction::Fraction init() {
int num;
int denom;
cout << "num: ";
cin >> num;
cout << "denom: ";
cin >> denom;
Fraction info(num, denom);
return info;
}
void print(Fraction& info) {
cout << "num: " << info.getnum() << endl;
cout << "denom: " << info.getdenom() << endl;
return;
}
void menu() {
int option;
do {
cout << "Select an option (use integer value only): ";
cin >> option;
switch(option) {
case 1:
initializingMenu();
break;
case 2:
addingMenu();
break;
case 3:
printingMenu();
break;
case 4:
cout << "Have Fun!" << endl;
break;
default:
cout << "Wrong option!" << endl;
}
} while (option != 0);
return;
}
void initializingMenu() {
Fraction a;
Fraction b;
Fraction c;
int option;
do {
cout << "Select an option (1, 2, or 3): ";
cin >> option;
switch(option) {
case 1:
cout << "\nCalling init() - Stand Alone...\n" << endl;
a = init();
b = init();
break;
case 2:
menu();
break;
default:
cout << "\nWrong option!" << endl;
initializingMenu();
}
} while (option != 0);
return;
}
void addingMenu() {
Fraction a;
Fraction b;
Fraction c;
int option;
do {
cout << "Select an option (1, 2, 3 or 4): ";
cin >> option;
switch(option) {
case 1:
cout << "\nCalling add() - Stand Alone...\n" << endl;
c = add(a,b);
break;
case 2:
menu();
break;
default:
cout << "\nWrong option!" << endl;
addingMenu();
}
} while (option != 0);
return;
}
void printingMenu() {
Fraction a;
Fraction b;
Fraction c;
int option;
do {
cout << "Select an option (1, 2, or 3): ";
cin >> option;
switch(option) {
case 1:
cout << "\nCalling print() - Stand Alone...\n" << endl;
print(c);
break;
case 2:
menu();
break;
default:
cout << "\nWrong option!" << endl;
printingMenu();
}
} while (option != 0);
return;
}
2つの分数を足すプログラムを作っています
メニューを使って作ろうとしています
次の 4 つのメニューがあります。
メインメニュー: 他のメニューに移動するオプションを提供
メニューの初期化: 入力 num および denom
メニューを追加: 分数まで追加
印刷メニュー: 追加された分数を印刷します
トラブル: プログラムを実行してメニューを順にたどりました: メイン > 初期化 > 追加 > 印刷しますが、印刷すると結果が間違っています。印刷すると、デフォルトのコンストラクターである0/1が返されます
私は別のプログラムを持っていて、それはうまくいきました: 2つの分数を追加します
ウェブサイトのプログラムから、同じメニューに入れたのでうまくいったと思いますが、これについては、分離したためだと思うので、クラスからnumとdenomの値を取得できませんでした
そこでお聞きしたいのですが、どうすればこれを修正できますか? そして、それらをメニューで区切ったときに実際の結果が得られなかった理由
私の貧弱な英語と非常に多くのコードで申し訳ありません