因此,以下代码应该使用targetInt数组为randomTarget对象设定种子,而是触发默认的targetInt构造函数,这将导致值为0的对象数组而不是我想要的随机整数。
驱动程序.cpp文件
using namespace std;
int highGuesses;
int lowGuesses;
int sumGuesses;
int numGuesses;
int avgGuess;
const int size = 25;
void initalize(randomTarget a)
{
int r;
int seed[size];
for (int j = 0; j < size; j++)
{
r = rand() % 100 + 1;
seed[j] = r;
}
a = randomTarget(seed);
}
int main(int argc, const char * argv[]) {
srand(time(NULL));
randomTarget random;
randomTarget random2;
initalize(random);
initalize(random2);
randomTarget r3;
r3 = random + random2;
r3.printRandom();
}
targetInt.h
using namespace std;
class targetInt{
int target;
bool known;
bool active;
int count;
//void copy(const targetInt& src);
public:
//targetInt& operator=(const targetInt& src);
targetInt& operator+(const targetInt& src);
bool operator!=(const targetInt& src);
bool operator<(const targetInt & src);
bool operator>(const targetInt& src);
bool operator==(const targetInt& src);
bool operator<=(const targetInt& src);
bool operator>=(const targetInt& src);
targetInt& operator+=(targetInt& src);
targetInt& operator-=(targetInt& src);
targetInt& operator-(const targetInt& src);
int getTarget(){return target;};
void turnOff(){active = false;}
targetInt(){known = false; active = true; target = 0; count = 0; }
targetInt(int value){known = false; active = true; target = value; count= 0;}
int query(int guess);
bool isActive(){return active == true;}
//targetInt(const targetInt& src) {copy(src);};
};
randomTargets.cpp
using namespace std;
randomTarget randomTarget::operator+(const randomTarget& src)
{
randomTarget temp;
for (int i = 0; i<size; i++)
{
temp.targets[i] = this->targets[i] + src.targets[i];
}
return temp;
}
randomTarget& randomTarget::operator+=(const randomTarget& src)
{
for(int i = 0; i< size ; i++)
{
this->targets[i] = this->targets[i] + src.targets[i];
}
return *this;
}
randomTarget& randomTarget::operator-=(const randomTarget& src)
{
for(int i = 0; i< size ; i++)
{
this->targets[i] = this->targets[i] - src.targets[i];
}
return *this;
}
bool randomTarget::operator==(const randomTarget& src)
{
return this == &src;
}
bool randomTarget::operator!=(const randomTarget& src)
{
return this != &src;
}
randomTarget randomTarget::operator-(const randomTarget& src)
{
randomTarget temp;
for (int i = 0; i<size; i++)
{
temp.targets[i] = this->targets[i] - src.targets[i];
}
return temp;
}
randomTarget::randomTarget()
{
for ( int i = 0; i < size; i++)
{
targets[i] = targetInt(0);
}
count = 0;
}
randomTarget::randomTarget(int value[])
{
for( int i = 0; i < size; i++)
{
targets[i] = targetInt(value[i]);
}
count = 0;
}
void randomTarget::printRandom()
{
for(int i = 0; i< size; i++)
{
cout << targets[i].getTarget() << " ";
}
cout << endl;
}
bool randomTarget::identify(int guess)
{
defunct = false;
int count = size;
bool found = false;
int id;
for (int i = 0; i < size; i++ )
{
id = targets[i].query(guess);
if (id == 0)
{
found = true;
targets[i].turnOff();
count--;
if (2 * count < size) defunct = true;
cout << "Correct!" << endl;
}
else if(id < 1)
{
cout << "Too Low!" << endl;
}
cout << "Too High!" << endl;
}
return found;
}
targetInt.cpp
int targetInt::query(int guess){
known = false;
if (guess < target)
{
count++;
return -1;
}
else if (guess > target)
{
count++;
return 1;
}
known = true;
active = false;
count++;
return 0;
}
targetInt& targetInt::operator+(const targetInt& src)
{
int newTarget = src.target + target;
targetInt i(newTarget);
return i;
}
targetInt& targetInt::operator-(const targetInt& src)
{
int newTarget = src.target - target;
targetInt i(newTarget);
return i;
}
targetInt& targetInt::operator-=(targetInt& src)
{
target = target - src.target;
return *this;
}
targetInt& targetInt::operator+=(targetInt& src)
{
target = target + src.target;
return *this;
}
bool targetInt::operator==(const targetInt& src)
{
return target == src.target;
}
bool targetInt::operator!=(const targetInt& src)
{
return target != src.target;
}
bool targetInt::operator<(const targetInt& src)
{
return target < src.target;
}
bool targetInt::operator>(const targetInt& src)
{
return target > src.target;
}
bool targetInt::operator<=(const targetInt& src)
{
return target <= src.target;
}
bool targetInt::operator>=(const targetInt& src)
{
return target >= src.target;
}
答案 0 :(得分:0)
检查你的原型:
void initalize(randomTarget a);
你说a
应该是一个randomTarget
对象,它被创建为传入内容的副本。
您希望a
成为传入内容的引用;即其类型应为randomTarget&
。
这就像没有涉及任何功能一样:如果,在主要的,你有
randomTarget a = random;
然后修改a
不会改变random
。但是,如果你有
randomTarget &a = random;
然后修改a
将更改random
。