1

我有一个用 C 为我编写的库。在库中有一个我需要在 foo.h 中使用的变量(在 C 中)

extern mystruct foobar;

在 bar.h(在 C++ 中)中,我有以下课程。

#include foo.h

class myfoo { 

private:
   mystruct foobar;
}

我想知道的是,如果我创建一个 myfoo 数组,每个 foobar 实例会引用同一个变量,还是每个实例都是独立于其他 myfoo foobar 的 myfoo 的唯一实例?

4

3 回答 3

5

这是交易:您没有使用foo.h'foobar变量bar.h(尤其如此,因为foo.h只有声明 foobar,定义必须在实现文件中)。相反,您是在类的范围内重新声明一个具有相同名称和类型的变量。

这样,实例成员变量的所有常规规则都适用。特别是,每个实例myfoo都会有自己的实例foobar

如果您从没有任何内容中删除了声明,则该声明将与您的文件foo.h完全无关。bar.h

于 2012-12-21T01:01:13.763 回答
3

foobar类定义中的成员定义在与at 全局范围myfoo不同的范围内。foobar它们是不同的变量,彼此无关,只是它们属于同一类型,并且恰好具有相同的名称(尽管在不同的范围内)。

如果你创建一个对象数组myfoo,每个对象都会有一个mystruct. 所有这些实例都将与在全局范围内声明的实例分开。

于 2012-12-21T01:01:36.060 回答
0

我想知道的是,如果我创建一个 myfoo 数组,每个 foobar 实例会引用同一个变量,还是每个实例都是独立于其他 myfoo foobar 的 myfoo 的唯一实例?

如果你这样做:

#include foo.h

class myfoo 
{ 
private:
    mystruct foobar;
};

void func()
{
    myfoo f[3];
    // ...
}

您创建了 3 个不同的myfoo对象,每个对象都有自己的foobar实例。

如果你改变 myfoo 声明如下:

#include foo.h

class myfoo 
{
private:
   static mystruct foobar;
};

// this extra declaration is required for 
// static member variables
mystruct myfoo::foobar;

void func()
{
    myfoo f[3];
    // ...
}

那么myfoo 的三个实例将共享它们的单个 foobar 实例。

注意

class myfoo声明可以在“.h”或“.cpp”文件中。

声明可能只出现mystruct myfoo::foobar;一次,因此它通常必须在“.cpp”文件(或“.cc”或您使用的任何文件)中。

于 2012-12-21T01:49:25.687 回答