Jak zaimplementować kompozycję klas w C ++?
Jeśli dobrze rozumiem, mamy co najmniej dwa różne sposoby wdrażania kompozycji. (Przypadek implementacji za pomocą inteligentnych wskaźników jest wykluczony ze względu na prostotę. Prawie nie używam STL i nie chcę się tego uczyć.)
Spójrzmy na Wikipedięprzykład:
class Car
{
private:
Carburetor* itsCarb;
public:
Car() {itsCarb=new Carburetor();}
virtual ~Car() {delete itsCarb;}
};
Więc to jest jeden sposób - mamywskaźnik do obiektu jako członek prywatny. Można przepisać go tak, aby wyglądało tak:
class Car
{
private:
Carburetor itsCarb;
};
W takim przypadku mamyobiekt sam jako członek prywatny. (Swoją drogą, czy mam prawo nazwać ten obiekt obiektem z terminologicznego punktu widzenia?)
W drugim przypadku nie jest obowiązkowe niejawne wywołanie konstruktora domyślnego (jeśli trzeba wywołać konstruktor inny niż domyślny, można to zrobić na liście inicjatorów) i destruktora. Ale to nie jest duży problem ...
Oczywiście w niektórych aspektach te dwa przypadki różnią się znacznie bardziej. Na przykład zabronione jest wywoływanie niestałych metod instancji Carburetor ze stałych metod klasy Car w drugim przypadku ...
Czy są jakieś „zasady” decydujące o tym, którego z nich użyć? Czy czegoś mi brakuje?