比如说我有一个 Language
阶级和 Director
类。
class Language
{
private:
std::string name;
Director director;
public:
Language(std::string name);
std::string getName() { return this->name; };
Director& getDirector() { return this->director; };
void setDirector(const Director& director) { this->director = director; };
}
class Director
{
private:
std::string main_language;
public:
Director();
std::string getMainLanguage() { return this->main_language; };
void setMainlanguage(std::string language) { this->main_language = language; };
}
两类之间是一对一的关系。Language
储存 Director
对象而 Director
只存储名称的 Language
作为一个字符串。 现在,如果我这样做。
Language language("English");
Director director;
language.setDirector(director);
language.getDirector().setMainLanguage(language.getName());
这个... director
的属性 language
改头换面 director
没有。我认为在getter和setter中都使用引用的 Language
本来是可以的,但显然不行。很明显,我可以直接用 director.setMainLanguage()
但这不是我想要的。 是否有什么原因会发生这种情况,或者我应该尝试其他的方式来实现?
在这个函数中。
void setDirector(const Director& director) { this->director = director; };
即使你接受的是 Director
参考,你在正文中做了一个拷贝,所以你最终没有改变原来的内容 Director
争论。
你可以提出 director
成员a Director&
但是,你 有 的构造函数中初始化这个引用。Language
例如
class Language
{
private:
std::string name;
Director &director;
public:
Language(std::string name, Director &d) : director(d), name(name) {}
// ...
}
然后像这样调用它。
Director director;
Language language("English", director);
你可以做 director
成员a Director *
也是。你必须修改 GetDirector
但要确保指针不会悬空,通过确保传入的 Director
寿命长达 Language
对象。