Streamの派生クラスのArrayStreamクラスのメンバ変数m_nが書き換わってしまい、うまく結果が出せません
デバッガを使ってみてみるとどうもStreamクラスから引っ張ってきている純粋仮想関数Set()の挙動がおかしいようで、
ArrayStram::Set()を呼び出して、値が変わった後関数を出ると値がおかしなことになります。
以下コードです ちなみに環境はVC++ 2010です
//main.cpp
#include "array.h"
#include "input.h"
#include <iostream>
using namespace std;
bool Average(Stream& stream)
{
	int count;
	double avr = 0;
	for(count = 0;stream.Set();count++)
	{
		avr += stream.Get();
	}
	if(count == 0)
		return false;
	avr /= count;
	cout<<"平均値 "<<avr<<endl;
	return true;
}
int main()
{
	InputStream istream;
	Average(istream);
	static const double Array[] = {0.5,1.5,-1};
	ArrayStream Astream(Array);
	Average(Astream);
	return 0;
}
//stream.h
#ifndef INCLUDE_STREAM
#define INCLUDE_STREAM
class Stream
{
	protected:
		double m_n;
	public:
		double Get() const;
		virtual bool Set() = 0;
		
};
//stream.cpp
#include "stream.h"
double Stream::Get() const
{
	return m_n;
}
#endif
//input.h
#ifndef INCLUDE_INPUT
#define INCLUDE_INPUT
#include "stream.h"
class InputStream : public Stream
{
public:
	virtual bool Set();
};
#endif
//input.cpp
#include "input.h"
#include <iostream>
using namespace std;
bool InputStream::Set()
{
	cin>>m_n;
	return m_n > -1;
}
//array.h
#ifndef INCLUDE_ARRAY
#define INCLUDE_ARRAY
#include "stream.h"
class ArrayStream : public Stream
{
private:
	const double* m_array;
	int m_i;
	double m_n;
public:
	ArrayStream(const double* Array);
	double Get() const;
	virtual bool Set();
};
#endif
//array.cpp
#include "array.h"
ArrayStream::ArrayStream(const double* Array)
{
	m_array = Array;
	m_i = 0;
	m_n = 0;
}
bool ArrayStream::Set()
{
	m_n = m_array[m_i];
	if(m_n >= 0)
	{
		++m_i;
		return true;
	}
	else
		return false;
}

 メニュー
 メニュー カレンダー
 カレンダー Clock
 Clock 最新メンバー
 最新メンバー 投稿数
 投稿数 Link to us
 Link to us カウンター
 カウンター