virtualについて。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tomtom

virtualについて。

#1

投稿記事 by tomtom » 8年前

このソースなのですが、
virtualが無くても動くのですが、
virtualは必要なのですか?

コード:

#include <iostream>

using namespace std;

class Frac {
protected:
	int bunshi;
	int bunbo;
	int gcd(int m, int n)
	{
		int p;
		for (p = (m > n) ? m : n; p >= 1; p--) {
			if (m % p == 0 && n % p == 0)
				break;
		}
		return p;
	}
public:
	Frac(int shi, int bo) {
		int p = gcd(shi, bo);
		bunshi = shi / p;
		bunbo = bo / p;
	}
	void print() {
		if (bunbo == 1) {		// 整数
			cout << bunshi << endl;
		} else if (bunshi > bunbo) {	// 仮分数
			// 帯分数にして出力
			cout << bunshi / bunbo << " + (" << bunshi % bunbo << "/" << bunbo << ")" << endl;
		} else {	// 真分数
			cout << "(" << bunshi << "/" << bunbo << ")" << endl;
		}
	}
	virtual Frac operator*(Frac b) {
		int shi = bunshi * b.bunshi;
		int bo = bunbo * b.bunbo;
		return Frac(shi, bo);
	}
	virtual Frac operator/(Frac b) {
		int shi = bunshi * b.bunbo;
		int bo = bunbo * b.bunshi; 
		return Frac(shi, bo);
	}
	virtual Frac operator+(Frac b) {
		int shi = bunshi * b.bunbo + b.bunshi * bunbo;
		int bo = bunbo * b.bunbo;
		return Frac(shi, bo);
	}
	virtual Frac operator-(Frac b) {
		int shi = bunshi * b.bunbo - b.bunshi * bunbo;
		int bo = bunbo * b.bunbo;
		return Frac(shi, bo);
	}
};

int main()
{
	int h, m;

	cin >> h >> m;
	Frac a1 = Frac(h, m);
	a1.print();

	cin >> h >> m;
	Frac a2 = Frac(h, m);
	a2.print();

	Frac b = a1 * a2;
	b.print();

	b = a1 / a2;
	b.print();

	b = a1 + a2;
	b.print();

	b = a1 - a2;
	b.print();

	return 0;
}

Math

Re: virtualについて。

#2

投稿記事 by Math » 8年前

>virtualが無くても動くのですが、
>virtualは必要なのですか?
virtualは継承の時の動作をきめているのでこの場合は継承しないのなら無くても動く仕様なのでしょう。
virtualの目的を考えてみればクラスの設計をまず決めることが先決です。

返信

“C言語何でも質問掲示板” へ戻る