155178 Temat założony przez niniejszego użytkownika |
Wykorzystanie konstruktorów klasy zaprzyjaźnionej w innej klasie » 2018-01-02 16:58:11 Witam. Posiadam klasę Samochod.h, która jest przyjacelem klasy Silnik.h oraz Kolo.h. W jaki sposób wykorzystać w konstruktorze klasy Samochod konstruktory klasy Silnik oraz Kolo? SAMOCHOD.h #pragma once #include<iostream>
#include"Silnik.h" #include"Kolo.h" #define nkol 4
using namespace std;
class Samochod { Silnik * silnik; Kolo * kola[ nkol ]; string nazwa; DodatkoweWyposazenie * wyposazenie[ nwyp ]; public: Samochod( const Samochod & samochod ); ~Samochod(); };
KOLO.h #pragma once class Kolo { friend class Samochod; int rozmiar; Kolo( int rozmiar ); public: int getRozmiar(); ~Kolo(); };
SILNIK.h #pragma once class Silnik { friend class Samochod; int moc; int liczbaCylindrow; Silnik( int moc, int liczbaCylindrow ); public: int getMoc(); int getLiczbaCylindrow(); ~Silnik(); };
W plikach CPP znajdują się implemetacje konstruktorów : Kolo : Kolo::Kolo( int rozmiar ) { this->rozmiar = rozmiar; }
Silnik : Silnik::Silnik( int moc, int liczbaCylindrow ) { this->moc = moc; this->liczbaCylindrow = liczbaCylindrow; } Chciałbym przy konstruktorze Samochodu skorzystać z powyższych konstruktorów. Jest to możliwe tak jak w przypadku klas dziedziczących czy z zaprzyjaźnionej klasy nie możemy użyć konstruktorów? Próbowałem czegoś takiego, ale chyba nie powinno to tak działać niestety : Samochod::Samochod( string nazwa, int moc, int liczbaCylindrow, int rozmiarKol ) : Silnik::Silnik( moc, liczbaCylindrow ) : Kolo::Kolo( rozmiarKol ) { this->nazwa = nazwa; } Samochod::Samochod( string nazwa, int moc, int liczbaCylindrow, int rozmiarKol ) { this->nazwa = nazwa; for( int i = 0; i <= nkol; i++ ) { kola[ i ] = new Kolo::Kolo( rozmiarKol ); } } Takie coś też nie jest poprawne. |
|
mateczek |
» 2018-01-02 17:06:18 skoro masz klase zawierającą wskaźniki na elementy innej klasy. to zwyczajnie Samochod::Samochod( string nazwa, int moc, int liczbaCylindrow, int rozmiarKol ) { this->nazwa = nazwa; silnik = new Silnik( moc, liczbaCylindrow ) kolo = new Kolo( rozmiarKol ) }
Samochod::Samochod( string nazwa, int moc, int liczbaCylindrow, int rozmiarKol ) : silnik( new Silnik( moc, liczbaCylindrow ) ) { this->nazwa = nazwa; } |
|
155178 Temat założony przez niniejszego użytkownika |
» 2018-01-02 17:08:56 Dzięki wielkie, kombinowałem, nawet raz w ten sposób to robiłem ale zapomniałem odkomentować deklaracji konstruktora przeciążonego. Dziękuję bardzo ! A w tym 2 sposobie, gdyby jeszcze chcieć dodać budowę 4 kół to wyglądać powinno to tak ? : Samochod::Samochod( string nazwa, int moc, int liczbaCylindrow, int rozmiarKol ) : silnik( new Silnik( moc, liczbaCylindrow ) ) : kola[ 0 ]( new Kolo( rozmiar, Kol ) ) : kola[ 1 ]( new Kolo( rozmiar, Kol ) ) : kola[ 2 ]( new Kolo( rozmiar, Kol ) ) : kola[ 3 ]( new Kolo( rozmiar, Kol ) ) { this->nazwa = nazwa; } |
|
YooSy |
» 2018-01-02 18:34:45 Nie rozumiem, czemu koło i slinik są przyjaciółmi samochodu. Przecież to są części samochodu i klasa Samochod powinna zawierać klasy Kolo oraz Silnik. |
|
155178 Temat założony przez niniejszego użytkownika |
» 2018-01-02 18:42:11 Źle to ująłem w słowa, deklaracja friend class Samochod; znajduje się w klasie Kolo oraz Silnik. |
|
YooSy |
» 2018-01-02 20:20:03 To widać. Nie rozumiem dlaczego korzystasz z zaprzyjaźnionych klas, skoro koła i silnik są częścią samochodu i powinny zawierać się w klasie reprezentującej samochód. To jest logiczne, jak w życiu. To nie powinna być przyjaźń tylko agregacja. https://wandbox.org/permlink/9efWdOShgMlntEJL |
|
155178 Temat założony przez niniejszego użytkownika |
» 2018-01-02 21:51:25 A w jaki sposób zrobić kompozycję? Jak powinna wyglądać kompozycja na podstawie silnika oraz kol? Chodzi o różnicę w implementacji.
A friend class mam na diagramie UML otrzymanym od prowadzącego. |
|
YooSy |
» 2018-01-03 09:10:45 A w jaki sposób zrobić kompozycję? |
Rozwiń pytanie. A friend class mam na diagramie UML otrzymanym od prowadzącego. |
Siła wyższa. |
|
« 1 » 2 3 4 5 |