我有一个链表程序,其中TailNode类继承自Node类,两个类都使用Data类参数。数据已在我的Node类标题中向前声明,但我不明白为什么我的程序运行正常,即使我没有在我的TailNode派生类头中转发声明的数据。
派生类是否还继承了基类使用的前向声明?我在这里缺少什么?
以下是我的两个标题Node和TailNode ...
Node.h
#ifndef NODE_H
#define NODE_H
class Data; //forward declaration
class Node
{
public:
Node(){}
virtual ~Node(){}
virtual Node* Insert(Data *theData) = 0;
virtual void Show() = 0;
};
#endif
TailNode.h
#ifndef TAILNODE_H
#define TAILNODE_H
class TailNode : public Node
{
public:
TailNode(){}
~TailNode(){}
virtual Node* Insert(Data *theData);
virtual void Show() { }
};
#endif
//TailNode inherits everything from Node and seems to not need Data forward declared maybe because it was already forward declared for Node class?
答案 0 :(得分:0)
因为class Data
和class Node
之间绝对没有任何关联,除了它们碰巧在同一个头文件中。
头文件可以轻松实现共享声明,但为方便起见,它们完全 。它们对包含在其中的代码没有任何影响。让我看看我是否可以用一个例子来澄清:
apple.h
class Data;
class Node
{
public:
Node(){}
virtual ~Node(){}
virtual Node* Insert(Data *
banana.h
theData) = 0;
virtual void Show() = 0;
};
class TailNode : public Node
{
public:
TailNode(){}
~TailNode(){}
virtual Node* Insert(Data *theData);
virtual void Show() { }
};
mycode.cpp
#include "apple.h"
#include "banana.h"
int main() {
}
#include
内的mycode.cpp
有效地将该文件中的任何内容复制粘贴到mycode.cpp
中。由于复制粘贴的代码有效:
class Data;
class Node
{
public:
Node(){}
virtual ~Node(){}
virtual Node* Insert(Data *theData) = 0;
virtual void Show() = 0;
};
class TailNode : public Node
{
public:
TailNode(){}
~TailNode(){}
virtual Node* Insert(Data *theData);
virtual void Show() { }
};
int main() {
}
然后该程序有效,并且工作正常!