让我们想象一下,我有一个模拟国家教育系统运作的代码。此国家/地区包含Cities
,其中包含Schools
,其中包含Classes
,其中包含Students
。我使用名为CountryInformation
的全局单例,所有类(City
,School
,Class
和Students
)都在访问。
我想扩展我的代码以考虑几个国家/地区。每个国家/地区都需要自己的CountryInformation
,因此CountryInformation
不再是单身人士。我希望给定Country
中包含的每个元素都可以访问与其国家/地区相关联的countryInformation
。我怎么能这样做?
问题的简化版本是考虑以下是我当前的代码
int info = 3;
class City
{
public:
void foo(){std::cout << info << std::endl;}
};
class Country
{
public:
City city;
void callFoo(){this->city.foo();}
};
int main()
{
Country C;
C.callFoo();
}
我现在想要像
这样的东西class City
{
public:
void foo(){std::cout << info << std::endl;}
};
class Country
{
public:
City city;
int info;
void callFoo(){this->city.foo();}
Country(int i):info(i){}
};
int main()
{
std::vector<Country> countries;
Country C1(0);
Country C2(0);
countries.push_back(C1);
countries.push_back(C2);
countries[0].callFoo();
countries[1].callFoo();
}
但上面的代码没有编译,因为给定国家/地区的City对象无权访问Country对象的属性。
我一直在考虑友谊和嵌套课程,但我无法理解如何提供这种访问权。
修改
我希望避免每个City
,School
和Student
携带指针。指针通常为4到8个字节,Student
通常为8个字节。因此,这样做会使RAM需求翻倍。
答案 0 :(得分:0)
你的课程没有嵌套;&#34;一个类只是将其他类作为成员。 City
个对象只能通过公共API与Country
个对象进行通信。但是,实际的嵌套类或内部类 能够访问外部类的私有变量:
class Country
{
class City
{
public:
City(Country& c) : country(c) {}
void foo() {
country.info = 1;
}
private:
Country& country;
};
int info;
};
无论哪种方式,您都必须将Country
对象显式传递给City
对象。