私は、国の教育システムの作業をシミュレートするコードを持っているとしましょう。この国には、Schools
を含むCities
が含まれており、Classes
を含み、Students
を含んでいます。すべてのクラス(City
、School
、Class
、Students
)がアクセスしているCountryInformation
というグローバルシングルトンを使用します。オブジェクトは、オブジェクトが含まれているクラスの属性にどのようにアクセスできますか?
いくつかの国を検討するようにコードを拡張したいと思います。各国は独自の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オブジェクトの属性にアクセスできません。
私は友人関係やネストされたクラスを検討していましたが、私はこのアクセスを与える方法を頭に入れません。
EDIT
私の周りのポインタを運ぶためにあらゆるCity
、School
とStudent
の必要性を回避したいと思います。ポインタは通常4〜8バイトで、Student
は通常8バイトです。そうすることで、RAMの必要性が倍増します。
国オブジェクトの "this"ポインタをCityのコンストラクタに渡すと、CityはCountryの部分にアクセスできます。部分がプライベートである場合、Cityを "友人"にする必要があります –
おそらくメンバ変数として 'int info'を持つ' city'と 'country'の共通基底クラスです。 – macroland
@ JerryJeremiahあなたは、すべての「都市」、すべての「学校」、すべての「学生」はそれが含まれる国へのポインタを運ぶべきですか?これは、すべての生徒が通常8バイトのみであるため、余分なRAMをかなり節約することになります。 –