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

问题描述 投票:0回答:1

比如说我有一个 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() 但这不是我想要的。 是否有什么原因会发生这种情况,或者我应该尝试其他的方式来实现?

c++ pass-by-reference
1个回答
2
投票

在这个函数中。

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 对象。

© www.soinside.com 2019 - 2024. All rights reserved.