【发布时间】:2017-05-01 07:27:57
【问题描述】:
抱歉标题不好...我认为该网站上可能存在解决方案,但我找不到它。
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;
...
};
而解析器和词法分析器需要访问符号表,这就是提出这个问题的原因。我认为这种设计“在我看来”类似于真正的编译器,但似乎很难实现......任何建议都值得赞赏。
【问题讨论】:
-
main()的内容是伪装成OOP的过程编码。将使用其属性的代码放入每个类中。C中的代码应该将一些工作委托给它的a和b属性,而不是深入研究它们的结构。main()的代码应该是这样的:int main() { C c; c.doSomething(); } -
是的,这是我想避免的部分...@axiac
-
Echoing @axiac,
friend应该用在 OOP 惨遭失败的场景中,不是,这样类就可以忽略接口并深入研究它们的结构