내 C++ 프로그램에서 트리 계층 구조 (정확한 AST)를 나타내야합니다. 좋아, 나는 여러 번 그러한 구조의 예를 보았지만 한 가지는 나에게 불명확하다. C++에서 AST를 구조체 대신 클래스를 사용하는 것이 왜 그렇게 흔한 지 말해 주시겠습니까? 예를 들어, AST의 노드를 나타내는이 코드를 고려 :C++의 추상 구문 트리 : 클래스와 구조체
class Comparison {
public:
Node* getLhs() const { return m_lhs; }
Node* getRhs() const { return m_rhs; }
//other stuff
private:
ComparisonOperator m_op;
Node* m_lhs;
Node* m_rhs;
};
(이 https://github.com/clever-lang/clever/blob/master/core/ast.h#L150에서 영감을하지만 불필요한 세부 사항을 멀리 던져) 당신이 여기에서 보는 것처럼 우리가 포인터를 돌려 두 게터가 개인 데이터 멤버와 포인터도 const가 아닙니다! 내가 들었을 때 캡슐화가 깨졌습니다. 그렇다면 AST 노드의 구조체 (모든 멤버가 기본적으로 public 인 구조체)를 사용하지 않는 이유는 무엇입니까? C++에서 AST를 어떻게 구현하겠습니까? (접근성 문제를 다루는 것을 의미합니까?) 개인적으로 구조체가 그러한 작업에 적합하다고 생각합니다.
임의의 프로젝트에서 코드를 게시했지만이 연습 (AST의 캡슐화 방법이있는 클래스)은 다소 자주 볼 수 있습니다.
나는 실제 응답이 아니라 의견 기반의 대답이라고 말할 것입니다. – skypjack
귀하의 질문은 실제로 AST에 관한 것이 아니라 개체에 숨겨진 개인 회원을 갖는 것이 좋은지 여부입니다. –
이런 종류의 게이머는 왜 그런 게터가 좋지 않은지에 대해 격찬하기 시작합니다. 그러나 나는 자제 할 것이다. 그것은 매우 의견을 기반으로합니다. – DeiDei