派生类是否继承基类使用的前向声明?

时间:2014-08-12 23:11:37

标签: c++ class inheritance declaration forward

我有一个链表程序,其中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?

1 个答案:

答案 0 :(得分:0)

因为class Dataclass 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() {
}

然后该程序有效,并且工作正常!