(記述中)C++問題集_クラスの応用1
※未記述、または記述中です。
クラスの応用1
問題1 演算子のオーバーロードとフレンド関数
Corpクラス(メンバ変数は社員、資本金)で会社testA(社員300、資本金10000)、testB(社員200、資本金12000)のオブジェクトを作る。
①”friend関数を用いて”、testA、testBを合併し、会社testCを新設せよ。(現状も出力する)
②売上が上がりました。testCについて社員・資本金ともに100増加させよ。(現状も出力する)
③売上が下がりました。testCについて社員・資本金ともに200減少させよ。(現状も出力する)
④好景気です。testCについて社員・資本金ともに3倍にせよ。(現状も出力する)
⑤不景気です。testCについて社員・資本金ともに半分にせよ。(現状も出力する)
⑥新年度です。社員が一人増えました。”前置インクリメントを用いて”社員を1増加させよ。
【実行結果】
$ prac1 起業しました。 testAは、社員300人、資本金10000万円です。 testBは、社員200人、資本金12000万円です。 合併してtestCを新設しました。 社員500人、資本金22000万円です。 売上が上がりました。社員も資本金も100増えました。 社員600人、資本金22100万円です。 売上が下がりました。社員も資本金も200減りました。 社員400人、資本金21900万円です。 好景気です。社員も資本金も3倍になりました。 社員1200人、資本金65700万円です。 不景気です。社員も資本金も半分になりました。 社員600人、資本金32850万円です。 新年度です。社員が一人増えました。 社員601人、資本金32850万円です。 $
【答え】
#include <iostream> using namespace std; class Corp { private: int members; int money; public: Corp(int mem = 0, int mon = 0) : members(mem), money(mon){} friend Corp operator+(Corp a, Corp b); Corp operator+(int plus){ Corp t; t.members = members + plus; t.money = money + plus; return t; } Corp operator-(int minus){ Corp t; t.members = members - minus; t.money = money - minus; return t; } Corp operator*(int multi){ Corp t; t.members = members * multi; t.money = money * multi; return t; } Corp operator/(int devide){ Corp t; t.members = members / devide; t.money = money / devide; return t; } Corp operator++(){ // インクリメントのように単項演算子のオーバーロードは引数なし members++; return *this; } void disp(){ cout << "社員" << members << "人、資本金" << money << "万円です。\n" << endl; } }; Corp operator+(Corp a, Corp b){ Corp c; c.members = a.members + b.members; c.money = a.money + b.money; return c; } int main(){ Corp testA(300, 10000), testB(200, 12000); cout << "起業しました。" << endl; cout << "testAは、"; testA.disp(); cout << "testBは、"; testB.disp(); Corp testC = testA + testB; cout << "合併してtestCを新設しました。" << endl; testC.disp(); testC = testC + 100; cout << "売上が上がりました。社員も資本金も100増えました。" << endl; testC.disp(); testC = testC - 200; cout << "売上が下がりました。社員も資本金も200減りました。" << endl; testC.disp(); testC = testC * 3; cout << "好景気です。社員も資本金も3倍になりました。" << endl; testC.disp(); testC = testC / 2; cout << "不景気です。社員も資本金も半分になりました。" << endl; testC.disp(); // testC = testC++; // 後置インクリメントも実現可能だが、ここでは取り扱わない。 testC = ++testC; cout << "新年度です。社員が一人増えました。" << endl; testC.disp(); return 0; }
問題4 変換関数
【実行結果】
$ prac4 $
【答え】
問題6 デストラクタ
【実行結果】
$ prac6 $
【答え】