2017-11-13 12 views
-1

저는 객체 지향 프로그래밍에 익숙하지 않고 클래스를 작성하는 최선의 방법으로 조금 어려움을 겪고 있습니다.다른 클래스에 정의 된 멤버 함수를 사용하는 클래스를 만드는 법 C++

숫자 목록이 아닌 개체로 정렬하는 아이디어를 추상화하려고합니다. 필자는 추상적 인 기본 클래스 인 SortableContainer을 가지고 있는데, 과부하 연산자와 함께 요소를 비교하고 교환하는 데 필요한 모든 가상 함수가 들어 있습니다. 그 다음 두 클래스가 있습니다. MVectorCoordinateArray입니다. 이러한 파생 클래스는 모두 기본 클래스의 모든 가상 함수에 대한 적절한 정의를가집니다. 이 시점까지는 모든 것이 잘 작동했습니다. MVector은 단지 벡터와 같은 객체를 저장하고 CoordinateArray은 '미만'이라는 개념이 정의 된 좌표 벡터를 저장합니다.

이제 내 문제는 살아있는 세포를 저장하기 위해 CoordinateArray 개체를 사용하여 삶의 게임을 구현하는 데 사용하려는 Life이라는 새 클래스를 만들었다는 것입니다. 내 Life 클래스의 개요는 다음과 같습니다

class Life 
{ 
public: 
    CoordinateArray LiveCells; 

    Life(); 
}; 

나는 생명의 개체를 만들고 일부 살아있는 세포의 좌표를 초기화의 CoordinateArray 파생 클래스에서 정의 된 멤버 함수 중 어느 것도 작동하지 않습니다. 이 문제를 어떻게 해결할 수 있습니까? SortableContainer 클래스에서 Life 클래스를 파생시킨 다음 모든 순수 가상 함수를 재정의해야합니까? 도움이나 도움이 필요한 방향을 알려 주시면 감사하겠습니다.

+1

[C++ books] (https://stackoverflow.com)를 참조하십시오./questions/388242/the-definitive-c-book-guide-and-list) 목록입니다. – Ron

+1

왜이 모든 수업을 들으셨습니까? 손에있는 문제는 완전히 불필요한 것처럼 보입니다. (그리고 문제의 대다수는 문제가된다.) – molbdnilo

+0

"fuctions 중 아무 것도 작동하지 않는다"고하는 이유는 무엇입니까? 나는 너를 못 찾는다. 예를 들어 주시겠습니까? – mcsim

답변

0

귀하의 질문에 간단하고 실용적인 방식으로 대답하려면 네가 Life 개체에 어딘가에서 올 필요가있는 일부 멤버 함수를 원한다면 가장 직접적인 방법은 해당 멤버가 포함 된 클래스에서 파생시키는 것입니다

class Life : public CoordinateArray 
{ 
public: 
    Life(); 
}; 

지금 당신은 당신의 Life objectsCoordinateArray A와 객체를 사용할 수 있습니다 기능, 구성 소유자에 구성원을 전송하지 않습니다, 상속는 않습니다. 순수한 가상 클래스가 부모 클래스에 있으면 파생 클래스에서 구현해야하지만 그렇지 않은 경우에도 자식 클래스에서 다시 구현하여 부모 동작을 덮어 쓸 수 있습니다.

의도적으로 피할 수있는 개념과 디자인 문제는 피할 수 없습니다. 이것은 기술적 관점에서 볼 때 디자인의 관점에서 볼 때 더 많은 맥락이 필요하고 주관적인 측면도 가지고 있기 때문에 또 다른 이야기입니다. 일부 살아있는 세포의 좌표를 초기화하기 위해

-1

CoordinateArray의 선언을 참조하는 것이 유용 할 것이다 생명

class Life::public CoordinateArray{ } 
0

에 클래스 CoordinateArray LiveCells 대중을 선언합니다. 그러나 CoordinateArray에서 공용 메서드를 만들어야한다고 생각합니다. 메소드가 비공개로 선언 된 경우 (즉, 클래스 선언에서 private: 이후에 오는 경우) 클래스 자체의 범위에서만 메소드를 사용할 수 있습니다. 공용으로 선언 된 경우 (public: 아래) 모든 범위에서 사용할 수 있습니다. (sidenote에는 클래스와 그 하위 클래스에서 사용할 수 있다는 것을 의미하는 protected라는 또 다른 분류가 있습니다.)