2012-05-26 2 views
3

학습 경험을위한 자체 이중 연결 목록을 만들려고합니다. 내 책은 아래의 노드 구조체를 보여 주며 내가 만든 Node 클래스와 동등한가 궁금합니다. 구조체의 해당 함수가 struct의 각 데이터 형식에 값을 할당하는 생성자 유형입니까?구조체와 클래스의 차이점과 이중 연결 목록의 노드 구성?

//===== Struct ===== 

struct Node 
{ 
    Node *next; 
    Node *prev; 
    std::string val; 
    Node(const std::string &value, Node *nextVal = NULL, Node *prevVal = NULL) : 
     val(value), next(nextVal), prev(prevVal) {} 
}; 

//===== Class ==== 
class Node 
{ 
public: 
    Node(std::string value = "", Node *pVal = NULL, Node *nVal = NULL); 
    virtual ~Node(void); 

protected: 
    Node *next; 
    Node *prev; 
    std::string val; 
}; 

Node(std::string value = "", Node *pVal = NULL, Node *nVal = NULL) 
{ 
    next = nVal; 
    prev = pVal; 
    val = value; 
} 
+1

일부 생성자에서 'value' 인수를 무시하는 것처럼 보입니다. 기본값을 사용하면 하나의 생성자를 작성하고 4 개의 정의가있는 것처럼 사용할 수 있습니다. 그리고 당신은 정말로'가상'소멸자가 필요합니까? 다형성 노드가 있습니까? –

+0

복사/붙여 넣기를 빨리하고 편집하는 것을 잊어 버렸다고 지적 해 주셔서 감사합니다. 하나의 생성자가 나중에 이것을 볼 수있는 다른 사람들을 위해 디폴트 값을 갖도록 업데이트했습니다. 가상 및 표준 소멸자간에 성능 문제가 있습니까? – LF4

+0

예, 있습니다. 하나는 가상 함수 호출을 발생시키고 다른 하나는 가상 함수 호출을 발생시킵니다. –

답변

1

예 - 그게 그대로입니다.

다음은 구조 생성자 예제가있는 페이지입니다.

http://www.yolinux.com/TUTORIALS/LinuxTutorialC++Structures.html

+0

링크를 가져 주셔서 감사합니다, 나는 좀 더 단순한 데이터 유형을 위해 구조체를 사용하지 않았고 생성자를 사용하지 않았기 때문에 약간 혼란 스러웠습니다. (구조체에는 함수가 없었고 클래스와 그것들 사이의 차이가 있다고 생각했습니다) . 그것은 알기에 차갑다. – LF4

+0

차이점은 주로 속성 및 상속의 기본 가시성 (클래스의 경우 private, struct의 경우 public)에 있습니다. –

1

이는 생성자 초기화 목록이라고하며이 구조체 또는 클래스의 속성을 초기화하기위한 것입니다.

일반적으로 이것은 속성을 초기화하는 기본 방법입니다.

가 명시 적으로 초기화 목록에서 속성을 초기화하지 않는 경우

Is it possible to defer member initialization to the constructor body?

길고도 짧은 이야기,이 기본 생성자 및 그를 사용하여 암시 적으로 초기화됩니다, 당신은 변수를 초기화됩니다 여기에 이유를 설명하는 토론이다 두번.

또한 포인터에 접근자가 필요합니다.

class Node 
{ 
public: 
    Node():next(NULL),prev(NULL),val("") {}; 
    Node(std::string value):next(NULL),prev(NULL),val(value) {}; 
    Node(std::string value, Node *pVal):next(NULL),prev(pVal),val(value) {}; 
    Node(std::string value, Node *pVal, Node *nVal):next(nVal),prev(pVal),val(value) {}; 
    virtual ~Node(void); 

    std::string getValue() 
    { 
     return val; 
    } 
    void setValue(std::string v) 
    { 
     val = v; 
    } 

    Node * getNext() 
    { 
     return next; 
    } 
    void setNext(Node * n) 
    { 
     next = n; 
    } 

    Node * getPrevious() 
    { 
     return prev; 
    } 
    void setPrevious(Node * n) 
    { 
     prev= n; 
    } 

protected: 
    Node *next; 
    Node *prev; 
    std::string val; 
}; 
관련 문제