对象如何访问包含它们的类的属性?

时间:2017-12-08 02:57:24

标签: c++ oop

让我们想象一下,我有一个模拟国家教育系统运作的代码。此国家/地区包含Cities,其中包含Schools,其中包含Classes,其中包含Students。我使用名为CountryInformation的全局单例,所有类(CitySchoolClassStudents)都在访问。

我想扩展我的代码以考虑几个国家/地区。每个国家/地区都需要自己的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对象的属性。

我一直在考虑友谊和嵌套课程,但我无法理解如何提供这种访问权。

修改

我希望避免每个CitySchoolStudent携带指针。指针通常为4到8个字节,Student通常为8个字节。因此,这样做会使RAM需求翻倍。

1 个答案:

答案 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对象。