演習問題13解答例

問1 派生クラスによる正方形,円,及び,正三角形の表現
問2 派生クラスによる 8 進,10 進,及び,16 進の出力

[問1]クラス Shape を基底クラスとして,正方形,円,正三角形を派生クラスとして定義せよ.また,それらの面積を表す関数を仮想関数として,基底クラスで定義せよ.
/****************************/
/* 正方形,円,正三角形     */
/*      coded by Y.Suganuma */
/****************************/
#include <iostream>
					// クラス Shape
class Shape {
	public:
		virtual double menseki() = 0;      // 面積の計算(純粋仮想関数)
};
					// クラス Rectangle
class Rectangle : public Shape {
		double size;
	public:
		Rectangle(double s) : size(s) {}   // コンストラクタ
		double menseki()                   // 正方形の面積
		{
			return size * size;
		}
};
					// クラス Circle
class Circle : public Shape {
		double size;
	public:
		Circle(double s) : size(s) {}      // コンストラクタ
		double menseki()                   // 円の面積
		{
			return 3.141592654 * size * size;
		}
};
					// クラス Triangle
class Triangle : public Shape {
		double size;
	public:
		Triangle(double s) : size(s) {}    // コンストラクタ
		double menseki()                   // 正三角形の面積
		{
			return  0.433012701 * size * size;
		}
};
                    // main
int main()
{
	Rectangle r1(1.0);
	Circle c1(1.0);
	Triangle t1(1.0);
	std::cout << r1.menseki() << " " << c1.menseki() << " " << t1.menseki() << std::endl;
	return 0;
}
		
[問2]クラス Number を基底クラスとして定義し,整数に対し 8 進,16 進,及び,10 進でその値を出力する関数を派生クラスとして定義せよ.
/****************************/
/* 8進,10進,16進     */
/*      coded by Y.Suganuma */
/****************************/
#include <iostream>
using namespace std;
					// クラス number
class Number {
	protected:
		int num;
	public:
		Number(int n) : num(n) {}   // コンストラクタ
		virtual void out() = 0;     // 出力(純粋仮想関数)
};
					// クラス o8
class O8 : public Number {
	public:
		O8(int n) : Number(n) {}    // コンストラクタ
		void out()                  // 8進出力
		{
			cout.setf(ios::oct);
			cout.unsetf(ios::dec);
			cout.unsetf(ios::hex);
			cout << num << endl;
		}
};
					// クラス o10
class O10 : public Number {
	public:
		O10(int n) : Number(n) {}   // コンストラクタ
		void out()                  // 10進出力
		{
			cout.unsetf(ios::oct);
			cout.setf(ios::dec);
			cout.unsetf(ios::hex);
			cout << num << endl;
		}
};
					// クラス o16
class O16 : public Number {
	public:
		O16(int n) : Number(n) {}   // コンストラクタ
		void out()                  // 16進出力
		{
			cout.unsetf(ios::oct);
			cout.unsetf(ios::dec);
			cout.setf(ios::hex);
			cout << num << endl;
		}
};
					// main
int main()
{
	O8 n1(200);
	O10 n2(200);
	O16 n3(200);

	n1.out();
	n2.out();
	n3.out();

	return 0;
}
		

菅沼ホーム 演習解答例目次 本文目次 付録 索引