假设我有一个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());
do的director
属性language
得到修改,而原始属性director
则没有。我认为在getter和setter中使用引用都Language
可以,但是显然不行。显然,我可以使用,director.setMainLanguage()
但这不是我想要的。
有什么原因会发生这种情况,还是我应该尝试另一种方法来实现这一目标?
在此功能中:
void setDirector(const Director& director) { this->director = director; };
即使您接受Director
by引用,也要在主体中进行复制,因此最终不会更改原始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
成员Director *
成为成员。您将必须更改while的语法GetDirector
,并确保传入Director
的Language
对象与对象一样长,以确保指针不会悬空。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句