比方说,我有以下类:重载操作员身体的奥秘
树和树;
对象树包含一个Tree对象的数组。
这里有树木和树类的内容:
Trees.h:
#pragma once
#include "Tree.h"
class Trees
{
private:
Tree m_Tree[20];
int iTrees;
public:
Trees(void) : iTrees(0){}
Tree GetTree(int i){ return m_Tree[i];}
void AddTree(Tree tree){ m_Tree[iTrees++] = tree;}
};
tree.h中:
#pragma once
#include <string>
class Tree
{
private:
std::string Name;
bool HasRelatives;
public:
Tree(void):HasRelatives(0){};
Tree(std::string name):Name(name), HasRelatives(0){};
std::string GetName(){ return Name;}
void SetName(std::string name){ Name = name;}
bool GetHasRelatives(){ return HasRelatives;}
void SetHasRelatives(bool alone){ HasRelatives = alone;}
bool operator == (Tree & tree)
{
if(this->GetName() == tree.GetName())
{
this->SetHasRelatives(1);
tree.SetHasRelatives(1);
return 1;
}
return 0;
}
};
而且让我们说我使用的是类像这样(main.cpp):
#include <iostream>
#include "Trees.h"
int main()
{
Trees Trees;
Trees.AddTree(Tree("Oak"));
Trees.AddTree(Tree("Oak"));
if(Trees.GetTree(0) == Trees.GetTree(1))
{
std::cout<<"Trees are the same" << std::endl;
if(Trees.GetTree(1).GetHasRelatives() == 1)
std::cout<<"Tree has relatives" << std::endl;
}
return 0;
}
据我当前的理解,程序应该输出“Tree has relatives”,因为第二个Tree(Trees.GetTree(1))是通过引用传递的,因此在==运算符的内部所做的任何更改都应该在其外部可见。 。
我在哪里错了?
多么美丽的问题名称。 – aaronman
那么,我可能已经过了那个... – Cover