类原型

时间:2011-05-31 13:02:30

标签: c++ prototype class-design

我在类a中放了几个类b的实例,但这会导致错误,因为类a不知道b是什么类。

现在我知道我可以通过编写我的文件来解决这个问题,但这会弄乱可达性并使我烦恼。我知道我可以对我的函数进行原型设计,因此我没有遇到这个问题,但却找不到关于如何对类进行原型设计的材料。

有没有人在c ++中有一个类原型的例子。

因为似乎有些困惑让我告诉你我想要什么

class A
{
public:

B foo[5];

};

class B
{
public:
int foo;
char bar;
}

但是这不起作用,因为A看不到B所以我需要在它们之前放一些东西,如果它是一个函数我会放A();然后再实施。我怎么能在课堂上做到这一点。

4 个答案:

答案 0 :(得分:19)

您可以声明所有类,然后按任意顺序定义它们,如下所示:

// Declare my classes
class A;
class B;
class C;

// Define my classes (any order will do)
class A { ... };
class B { ... };
class C { ... };

答案 1 :(得分:4)

您正在寻找声明。

class A;
class B {
    A MakeA();
    void ProcessA(A a);
};
class A {
    B bs[1000];
};

如果你转发声明一个类,你可以

declare functions taking and returning it or complex types made of it
declare member variables of pointer or reference to it

这基本上意味着在任何情况下,不会以B内部的A实例结束,反之亦然,您应该能够声明和定义A和B之间的任何接口。

答案 2 :(得分:2)

解决循环依赖关系的常用方法是使用前向声明:

// Bar.h

class Foo; // declares the class Foo without defining it

class Bar {
    Foo & foo; // can only be used for reference or pointer
};

// Foo.h

#include <Bar.h>

class Foo {
    Bar bar; // has full declaration, can create instance
}

您可以在另一个文件中提供完整的声明和定义。使用forward声明,您可以创建指向该类的指针和引用,但是您无法创建它的实例,因为这需要完整的声明。

答案 3 :(得分:1)

class b;

class a {
public:
     b * inst1;
};
class b{
....
};

这是你需要的吗?