gpt4 book ai didi

c++ - 如何访问类成员

转载 作者:行者123 更新时间:2023-11-30 05:13:51 24 4
gpt4 key购买 nike

抱歉标题不好...我认为该站点上可能存在解决方案,但我找不到。

class A {
};

class B {
private:
int _b;
};

class C {
private:
A a; // a: I want to access _b in b
B b;
};

假设我有 3 个类,如上面的代码,现在类 C 中的对象 a 想要访问对象中的成员 _b b。有什么方法可以实现吗?

我试过用friend,不知道是不是我没有用对,因为它让代码变得很复杂,像这样:

class B {
private:
int _b;
public:
B() : _b(5) {}
int get_b() {
return _b;
}
};

class A {
public:
int get_a(B& b) {
cout << b.get_b();
}
};

class C {
private:
friend class A;
A a;
B b;
public:
A& get_A() {
return a;
}
B& get_B() {
return b;
}
};

int main() {
C c;
c.get_A().get_a(c.get_B());
}

提前谢谢你。

编辑

抱歉,上面的代码令人困惑,实际上我想实现一个使用 OO 风格的编译器。我认为编译器是由词法分析器、解析器、符号表和其他东西组成的。所以我认为关系是:

class compiler {
private:
lexer l;
parser p;
symbol_table st;
...
};

而parser和lexer需要访问symbol_table,所以才提出这个问题。我认为这种设计“在我看来”类似于真正的编译器,但它似乎很难实现……欢迎任何建议。

最佳答案

在你的例子中,A 必须是 B 而不是 C 的 friend 才能访问 B:

class A;

class B {
friend class A;
//...
};

// ....

换句话说,它应该是这样的:

#include<iostream>

using namespace std;

class A;

class B {
friend class A;
private:
int _b;
public:
B() : _b(5) {}
};

class A {
public:
int get_a(B& b) {
cout << b._b;
}
};

class C {
private:
A a;
B b;
public:
A& get_A() {
return a;
}
B& get_B() {
return b;
}
};

int main() {
C c;
c.get_A().get_a(c.get_B());
}

话虽如此,您可能应该重新考虑您的设计,以避免您的类之间存在如此强烈的依赖关系,并摆脱 friend

关于c++ - 如何访问类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43715712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com