Awesome Hacks!

プログラミング初心者なので地道に勉強していきます。分からない人の立場から整理していきます。

(記述中)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;
}


問題2 フレンド関数のオーバーロード



 
【実行結果】

$ prac2
$ 

【答え】


問題3 単項演算子オーバーロード



 
【実行結果】

$ prac3
$ 

【答え】


問題4 変換関数



 
【実行結果】

$ prac4
$ 

【答え】


問題5 変換コンストラクタ



 
【実行結果】

$ prac5
$ 

【答え】


問題6 デストラクタ



 
【実行結果】

$ prac6
$ 

【答え】


問題7 コピーコンストラクタ



 
【実行結果】

$ prac7
$ 

【答え】