比方說,我有以下類:重載操作員身體的奧祕
樹和樹;
對象樹包含一個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