학습 경험을위한 자체 이중 연결 목록을 만들려고합니다. 내 책은 아래의 노드 구조체를 보여 주며 내가 만든 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;
}
일부 생성자에서 'value' 인수를 무시하는 것처럼 보입니다. 기본값을 사용하면 하나의 생성자를 작성하고 4 개의 정의가있는 것처럼 사용할 수 있습니다. 그리고 당신은 정말로'가상'소멸자가 필요합니까? 다형성 노드가 있습니까? –
복사/붙여 넣기를 빨리하고 편집하는 것을 잊어 버렸다고 지적 해 주셔서 감사합니다. 하나의 생성자가 나중에 이것을 볼 수있는 다른 사람들을 위해 디폴트 값을 갖도록 업데이트했습니다. 가상 및 표준 소멸자간에 성능 문제가 있습니까? – LF4
예, 있습니다. 하나는 가상 함수 호출을 발생시키고 다른 하나는 가상 함수 호출을 발생시킵니다. –