2014-02-28 2 views
0

Node 클래스를 소개하는 Node.h 파일이 있고 Node.cpp 파일에 메서드 및 멤버 변수가 구현되어 있습니다. 이제 다른 클래스의 정의에서이 클래스를 사용해야하지만 구현을위한 몇 가지 추가 변수가 필요합니다. 헤더 파일을 변경할 수 없습니다. 어떻게해야합니까? ,C++에서 클래스 정의에 새 변수 추가

#include "Node.h" 

class NewNode: public Node { 

    // New stuff goes here 

} 

// 편집 주석에서 언급 한 바와 같이

을 소멸자가 가상인지 확인 : 상속 그냥 같은, 노드 후 상속하는 새로운 클래스를 생성위한 것입니다

+2

서브 클래스, 노드 –

+0

에서 클래스를 파생시킵니다. OOP는 친구입니다. 해당 클래스를 상속하고 확장하십시오. – jrd1

+0

헤더 파일에 메서드를 추가 할 수없는 경우 - 다른 파일에서이 함수를 어떻게 알 수 있습니까? –

답변

2

.

+2

"상속을 처음 접했기 때문에 소멸자가 가상이라는 것을 확인하십시오." –

+0

좋은 지적 벤자민 :) – Kelm

0

상속 및 구성에는 두 가지 방법이 있습니다. 새로운 클래스가 몇 가지 추가 기능이있는 노드 인 경우 다른 사람들이 제안한대로 상속을 사용해야합니다. 새 클래스가 노드로 작업해야하지만 실제로 노드가 아닌 경우 새 클래스에 노드 클래스의 데이터 멤버를 지정합니다.

컴포지션을 사용하면 새 클래스가 노드 인터페이스를 얻지 못해 노드 구성원 함수가 자동으로 작동하지 않는다는 것을 의미합니다. protected 기능을 얻지 못합니다 (Node 클래스는 어쨌든 없어야 함). Node에 대한 미래의 변경 가능성으로부터 약간의 단열을 얻습니다. 새로운 Node 함수를 추가하면 상속을 사용하는 경우 새 클래스에 추가됩니다. 그것은 새로운 클래스와 노드 사이의 결합을 줄여 주는데, 일반적으로 좋다.

가능할 때 컴포지션을 사용하고 작업을 훨씬 쉽게 만드는 경우에만 상속하십시오.

구성을 사용하려면, 새 .H 파일이있을 것입니다 :

#include "Node.h" 

Node m_node; 

또는 명시 적 할당이 필요

class Node; 

std::unique_ptr<Node> m_node; // or other desired pointer type 

합니다 (std::unique_ptr는 클래스 멤버가 삭제 될 때 m_node을 삭제할 수 있습니다) 간접 지정의 추가 레이어 (m_node.Foo()이 아닌 m_node->Foo())가 있습니다. .h 파일에 .h 파일을 포함하는 대신 포워드 선언을 사용하는 것은 컴파일 속도를 높이기 때문에 대규모 프로젝트에 유용합니다.

그러면 새로운 클래스의 노드에서 노드 public 함수를 호출하십시오.

관련 문제