ページ 11

課題を教えてください。

Posted: 2007年1月27日(土) 15:50
by ひろし
課題があるのですが
どうしてもわかりません。。
良ければ教えてください。


‒基本クラス「drink」を下記の要素を含めて作成しなさい。

•メンバ変数:甘味,塩味,酸味,苦味,旨味(すべてint型)
•メンバ関数:
・コンストラクタ(各メンバ変数の初期化(適当な値でよい)とコンストラクタが呼ばれたコンソール出力を実装)
・デストラクタ(デストラクタが呼ばれたコンソール出力を実装)
・各メンバ変数の入出力
・メンバ変数のコンソール出力

‒基本クラス「drink」を継承する「tea」クラスおよび「milk」クラスを下記の要素を含めて作成しなさい。

•メンバ変数:渋み,こく,香り(すべてint型)
•メンバ関数:
   ・drinkクラスと同じ機能

‒main()関数で「tea」オブジェクトおよび「milk」オブジェクトを1つづつnew演算子で作成し,delete演算子で削除しなさい。そして,この時のコンストラクタおよびデストラクタの呼ばれ方を確認しなさい。

Re:課題を教えてください。

Posted: 2007年1月27日(土) 16:05
by バグ
何が分からないのでしょうか?

Re:課題を教えてください。

Posted: 2007年1月27日(土) 16:15
by ひろし
>バグさん

発言ありがとうございます。
いきなりやれと言われたので
正直言いますとすべてわかりません。

Re:課題を教えてください。

Posted: 2007年1月27日(土) 16:22
by バグ
クラスを作るという事ですので、おそらくC++の課題だと思いますが、どこまでC++について理解していますか?
変数、関数、構造体、クラスは分かりますか?

Re:課題を教えてください。

Posted: 2007年1月27日(土) 16:25
by ひろし
>バグさん

C++の課題です。

習ってないのでまったくわかりません。
明後日までに作って来いと言われました。。

Re:課題を教えてください。

Posted: 2007年1月27日(土) 16:36
by バグ
習ってないのに課題に出るのも不思議な話ですが…(^_^;)

それでは、プログラム…特にC言語の知識はどの程度ありますか?
それによって、アドバイスの内容が変わってきますので…。

Re:課題を教えてください。

Posted: 2007年1月27日(土) 16:39
by ひろし
>バグさん
C言語は数年前にやってたのですが
もうほとんど忘れてしまいました。

申し訳ないのですが、ソースを書いてもらうことはできませんか??

Re:課題を教えてください。

Posted: 2007年1月27日(土) 16:46
by バグ
ソースを書いて提示するのは簡単な事ですが…ここはアドバイスする場であって、課題の丸投げをする場ではありませんので、それは出来かねます(-_-;)

Re:課題を教えてください。

Posted: 2007年1月27日(土) 16:58
by ひろし
>バグさん

そうですよね。
申し訳ありません。

Re:課題を教えてください。

Posted: 2007年1月27日(土) 19:19
by バグ
#include	<iostream.h>

// drinkクラス
class	drink
{
public:
	int	m_Ama;
	int	m_Sio;
	int	m_San;
	int	m_Niga;
	int	m_Uma;
	
public:
	drink();
	~drink();

public:
	void	Input();
	void	Output();
};

drink::drink()
{
	m_Ama = 0;
	m_Sio = 0;
	m_San = 0;
	m_Niga = 0;
	m_Uma = 0;
	
	cout << "drinkクラスのコンストラクタです" << endl;
}

drink::~drink()
{
	cout << "drinkクラスのデストラクタです" << endl;
}

void	drink::Input()
{
	cout << "甘味を入力してください" << endl;
	cin >> m_Ama;
	
	cout << "塩味を入力してください" << endl;
	cin >> m_Sio;
	
	cout << "酸味を入力してください" << endl;
	cin >> m_San;
	
	cout << "苦味を入力してください" << endl;
	cin >> m_Niga;
	
	cout << "旨みを入力してください" << endl;
	cin >> m_Uma;
}

void	drink::Output()
{
	cout << "甘味 = " << m_Ama << endl;
	cout << "塩味 = " << m_Sio << endl;
	cout << "酸味 = " << m_San << endl;
	cout << "苦味 = " << m_Niga << endl;
	cout << "旨味 = " << m_Uma << endl;
}



// teaクラス
class	tea	:	public	drink
{
public:
	int	m_Sibu;
	int	m_Koku;
	int	m_Kaori;

public:
	tea();
	~tea();
	void	InputEx();
	void	OutputEx();
};

tea::tea()
{
	m_Sibu = 0;
	m_Koku = 0;
	m_Kaori = 0;
	
	cout << "teaクラスのコンストラクタです" << endl;
}

tea::~tea()
{
	cout << "teaクラスのデストラクタです" << endl;
}

void	tea::InputEx()
{
	Input();

	cout << "渋味を入力してください" << endl;
	cin >> m_Sibu;
	
	cout << "コクを入力してください" << endl;
	cin >> m_Koku;
	
	cout << "香りを入力してください" << endl;
	cin >> m_Kaori;
}

void	tea::OutputEx()
{
	Output();
	
	cout << "渋味 = " << m_Sibu << endl;
	cout << "コク = " << m_Koku << endl;
	cout << "香り = " << m_Kaori << endl;
}



// milkクラス
class	milk	:	public	drink
{
public:
	int	m_Sibu;
	int	m_Koku;
	int	m_Kaori;

public:
	milk();
	~milk();
	void	InputEx();
	void	OutputEx();
};

milk::milk()
{
	m_Sibu = 0;
	m_Koku = 0;
	m_Kaori = 0;
	
	cout << "milkクラスのコンストラクタです" << endl;
}

milk::~milk()
{
	cout << "milkクラスのデストラクタです" << endl;
}

void	milk::InputEx()
{
	Input();

	cout << "渋味を入力してください" << endl;
	cin >> m_Sibu;
	
	cout << "コクを入力してください" << endl;
	cin >> m_Koku;
	
	cout << "香りを入力してください" << endl;
	cin >> m_Kaori;
}

void	milk::OutputEx()
{
	Output();
	
	cout << "渋味 = " << m_Sibu << endl;
	cout << "コク = " << m_Koku << endl;
	cout << "香り = " << m_Kaori << endl;
}

// main関数
void	main()
{
	tea	*pTea = new( tea );
	pTea->InputEx();
	pTea->OutputEx();
	delete( pTea );

	milk	*pMilk = new( milk );
	pMilk->InputEx();
	pMilk->OutputEx();
	delete( pMilk );
}

Re:課題を教えてください。

Posted: 2007年1月27日(土) 19:27
by ひろし
>バグさん

ありがとうございます!!
本当に嬉しいです。
助かりました。

Re:課題を教えてください。

Posted: 2007年1月27日(土) 20:16
by ま~く
あら・・・いいんですかねー^^;

Re:課題を教えてください。

Posted: 2007年1月27日(土) 20:26
by バグ
自分の復習の為につくりました(苦笑)
レスしてしまったので、乗り掛かった船ということで、中途半端にしておくのが気持ち悪かっただけなんですよ。次はないです(;^_^A

今、気付いたんですけど、newでのメモリ確保に失敗した時のチェックが無かったですね…まぁ、これ位は自分でやってもらいましょう♪

Re:課題を教えてください。

Posted: 2007年1月27日(土) 20:35
by Justy
newでのメモリ確保に失敗した時のチェックが
 ほかにもありますが、それらも含めてひろしさんへの課題、ということでいいんじゃないでしょうか >ま~くさん

Re:課題を教えてください。

Posted: 2007年1月27日(土) 22:44
by ま~く
そうですね^^

そもそも習ってないのにそんな課題がでるはずないですもんね~

Re:課題を教えてください。

Posted: 2007年1月28日(日) 00:42
by バグ
>>Justyさん
う…何かやらかしてましたか?(;^_^A
ソースを見直してみたんですが分からないです(;-_-)
もし、私の知らない致命的なミスだったらいけないんで、良ければヒントだけでもいただけると有り難いのですが…m(__)m

Re:課題を教えてください。

Posted: 2007年1月28日(日) 01:22
by Justy
 えーと致命的ではないです。
 見方によっては大した問題ですらないです。

・ 課題が規定しているメンバ関数が実装されていない気が。
・ main関数の「形」が・・・
・ "iostream.h"は今は存在しない環境も・・・。
・ cinで数値以外を入力すると・・・。
・ 使い方次第で teaのデストラクタが呼ばれないかも・・・。


 でも問題の方の teaクラスと milkクラスって何が違うんでしょうねぇ???

Re:課題を教えてください。

Posted: 2007年1月28日(日) 01:37
by 管理人
バグさん、ありがとうございます。
今日は友達の犬小屋作りで今までかかってたんで、ずっと家を空けていました^^;
やっと出来ましたよ~!いや~日曜大工って楽しいですね♪
木材せっせこ切って、それをつなげるのにこの前かった電動ドリルが大活躍・・・・。って関係ないですね^^;

う、管理人のくせに、関係ない話しか出来ない・・。
ハイ、C++勉強してきます(T_T

Re:課題を教えてください。

Posted: 2007年1月28日(日) 01:49
by バグ
>>Justyさん
指摘、ありがとうございますm(__)m
iostream.hって無い環境があるんですね~。知らなかったです(;^_^A
普段はstdio.hを使うのですが、今回はC++ということだったのでわざとiostream.hを使ってみたんですよ。
main関数の型はint型が標準なのは承知していたのですが、いつもの癖でついついvoid型にしてしまっていました(;^_^A
cinで数値以外を入力したら…どうなるんでしょう?とりあえず、Enterキーは無視されたみたいなんですが…?

問題を読む限りでは、teaクラスとmilkクラスは同じですよね。分ける意味が分かりませんでしたが、問題文に忠実に作ってみました(笑)

Re:課題を教えてください。

Posted: 2007年1月28日(日) 01:54
by バグ
あ、メンバ関数の実装については、よく分からないのですが…
コンソールへの入出力というのは、画面に出すだけでは駄目だったのでしょうか?

Re:課題を教えてください。

Posted: 2007年1月28日(日) 02:07
by Justy
iostream.hって無い環境があるんですね
 古いヘッダなんですよ、それ。
 今の標準は <iostream>です。


cinで数値以外を入力したら…どうなるんでしょう
 うちの環境だと、以後の cinが全部そのままスルー(無視)されます。


メンバ関数の実装については、よく分からないのですが
 実装するべきメンバ関数に「各メンバ変数の入出力」があります。
 「各」ということはメンバ変数の数だけ入出力の関数があるわけで。
 問題はこの入出力が「どこ」と行うのか明記されていないので、
普通はクラスの外と中との入出力を指すと思います。

 つまり、
[color=#d0d0ff" face="monospace]void drink::set_ama(int val);
int drink::get_ama() const;[/color]
 のようなメンバ関数を作る必要があるのではないか、ということです。


コンソールへの入出力というのは、画面に出すだけでは駄目だったのでしょうか
 コンソールへの出力は問題ないと思います。

Re:課題を教えてください。

Posted: 2007年1月28日(日) 02:16
by バグ
なるほど!クラス外へメンバ変数の情報を出力する関数が必要だった訳ですか(^-^)
コンソールへの入出力だけで良いのだと思ってました。というか、なぜ入出力に関する記述を2つに分けているのだろう?と考えもしてなかったです(苦笑)
自分の読解力の無さを反省します(;´Д`)
ありがとうございましたm(__)m