类原型设计

Class prototyping

本文关键字:原型      更新时间:2023-10-16

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

现在我知道我可以通过编写文件b a c来解决这个问题,但这既破坏了可达性,也让我很恼火。我知道我能对函数进行原型化,所以我没有这个问题,但是我找不到关于如何对类进行原型化的材料。

有人有c++中类原型的例子吗。

由于似乎有些混乱,让我给你看看我想要什么

class A
{
public:
B foo[5];
};
class B
{
public:
int foo;
char bar;
}

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

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

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

您正在寻找声明。

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之间的任何接口。

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

// 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
}

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

class b;

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

这是你需要的吗?