首先考虑类声明:
class Container
{
public:
Container();
void funcMember();
private:
int dataMember;
};
class Contained
{
public:
Contained();
int contmember();
private:
int somedata;
};
现在的想法是,Contained
类是为在Container
类中声明而创建的,因此可以多次声明它,并在需要时创建和删除,在这种情况下,从Container
类中的funcMember()
。
我的问题:有没有办法让Container
内部的每个Contained
实例都可以访问Container
实例中的dataMember
?
注意:多个Contained
对象可以在somedata
变量中保存不同的值。
您可以使用
friend
和嵌套类来执行此操作:
Container.h
:
class Container
{
class Contained; // <<< Forward declare
friend class Contained; // <<< Allow access from Contained
class Contained
{
public:
Contained(Container& cont_) : cont(cont_) {}
int contmember();
private:
int somedata;
Container& cont;
};
public:
Container();
void funcMember();
private:
int dataMember;
};
在另一个 TU 中提供看到完全声明的 Container
类的实现:
Container.cpp
#include "Container.h"
int Container::Contained::contmember() {
return cont.dataMember + somedata;
}