如何对来自不同头文件的类使用多态性

How to use polymorphism with classes from different header files?

本文关键字:文件 多态性      更新时间:2023-10-16

我在header中创建了class Figure: " Figure .h":

class Figure
{
    Color color;
    std::string position;
    ...
};

,我想在标题" King .h"中定义一个类King。在《国王》中,我是这样做的#include "figure.h",并写入示例:

class King : public Figure
{
     char type;
     bool checkIfTypeIsValid(std::string);
     ...
};

但这似乎不起作用,因为King不认识Figure…我该怎么办?为不同的继承类使用不同的头文件,或者只是把它们放在"figure.h"中,这是明智的吗?因为我将有一个女王,主教等人物,这将使相当多的头和暗示。文件. .

首先:您不能从未知的,甚至是部分已知的派生类。为了定义King,必须首先包含Figure.h(假设King在另一个文件中定义)。

更一般地说,关于如何组织代码,没有人明确的答案。就我个人而言,在一个特殊的情况下派生类的数量有很好的定义和严格的约束)可能会走捷径并在Figure.h中定义所有这些,但确实存在为每个—if使用单独的标头是很好的论据没有别的了,你不需要包含个人的标题除了在创建它们的文件中。另一个解决方案是将工厂函数用于图形,并定义派生函数在源文件中实现工厂函数的类

首先需要包含figure.h

#include<Figure.h>
class King : public Figure
{
    ...
};

检查编译器的包含路径。它就像:-I"PATH_TO_DIR_WHERE_FIGURE_H_LOCATED",不带引号。

确保king.h包含#include "figure.h"#include <figure.h>,只要figure.hking.h在同一文件夹的包含路径上。如果你在Windows上,include头可能有不正确的大小写。在其他方面,确保案例是正确的。最后,如果Figure的定义在名称空间内,则必须附加:

class King : public some_namespace::Figure
{
   //....
};