使用头文件

扩展C ++中的类。 我发现要扩展类,我必须这样做:
class x : public extendsThis { // rest here
};
因此,我在两个单独的文件中创建了2个类:
- particle.h -
class particle : public program {
};

 - program.h -

 class program {
    particle* myParticle;
 };
但是,在程序类中,我希望有粒子对象,然后再次扩展程序类。 但是,这将要求我在粒子类中包含一个include程序.h,并在该程序类中具有一个particle.h包含,以使他们彼此了解。但是,这创建了一些无限循环,使我无法编译。 有什么办法解决这个问题,还是我做错了什么?     
已邀请:
是的,您可以解决此问题。您可以进行非常简单的类声明。 在program.h中:
class particle;

class program
{
  particle *myParticle;
};
请记住,您需要使用指向粒子的指针。     
在某些情况下,您可以在包含文件之一中使用前向声明:
class a;

class b { a* ptr; };
这也可能表明您的设计可能需要重新考虑。通常,您的程序应该“知道”它的组件,而不是相反。程序的组件应为小型独立类,并具有简单定义良好的功能。如果纠缠了所有的类,您将获得“远距离的怪异动作”(错误)。 ;)     
可能只是我,但似乎您做错了。为什么要用程序类扩展粒子类?从理论上讲,您会得到以下信息:
class particle {
    particle *myParticle;
};
请注意,扩展类可能如何潜在地导致无限循环?我的意思是,这只是我的理解,我可能会犯错,但这是需要考虑的事情。有人让我知道我是否要离开这里。     
我将发布此答案以解释从默认程序构造函数调用默认粒子构造函数的危险。
#include <iostream>

class particle;

class program {
    particle* myParticle;

public:
    program();
};

class particle : public program {
public:
    particle()
    {
        std::cout << \"Particle constructor\\n\" << std::flush;
    }
};

program::program()
{
    std::cout << \"Program constructor\\n\" << std::flush;
    myParticle = new particle();
}

int main()
{
    program *myProgram = new program();
    delete myProgram;
    return 0;
}
当我编译并运行该程序时,它会继续打印“程序构造函数”,因为
particle::particle()
总是先调用
program::program()
,从而导致无限循环。注释掉行“ 8”可以解决此问题。     
在头文件中使用包含防护:http://en.wikipedia.org/wiki/Include_guard     

要回复问题请先登录注册