是否可以通过引用修改属性的属性?

亚历山大·马克

假设我有一个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());

dodirector属性language得到修改,而原始属性director则没有。我认为在getter和setter中使用引用都Language可以,但是显然不行。显然,我可以使用,director.setMainLanguage()但这不是我想要的。

有什么原因会发生这种情况,还是我应该尝试另一种方法来实现这一目标?

慈济

在此功能中:

void setDirector(const Director& director) { this->director = director; };

即使您接受Directorby引用,也要在主体中进行复制,因此最终不会更改原始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,并确保传入DirectorLanguage对象对象一样长,以确保指针不会悬空

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章