1551 |
» 2018-01-09 13:27:41 Dziękuje, trochę już rozumiem. Czyli klasa samochód zawiera w sobie klasę kolo oraz silnik? I używamy tego bez wskaźników, jak wiec korzystać z tego przy tworzeniu samochodu? Jak powinien wyglądać konstruktor samochód po tych zmianach?
Konstruktory tych klas(silnik oraz koło) na diagramie znajdują się po znaku „-„ co oznacza ze maja być prywatne. |
|
155178 Temat założony przez niniejszego użytkownika |
» 2018-01-10 15:36:58 Próbowałem zrobić konstruktor klasy Samochod analogicznie do tych klas na wandboxie i mam problem ponieważ : Samochod( string & nazwa, int & moc, int & liczbaCylindrow, int & rozmiarKol ) : nazwa { nazwa }, silnik { moc, liczbaCylindrow }, kola[ 0 ] { rozmiarKol }, kola[ 1 ] { rozmiarKol }, kola[ 2 ] { rozmiarKol }, kola[ 3 ] { rozmiarKol } { } coś takiego nie daje efektu. W jaki sposób zbudować ten konstruktor? Fragmenty z wandbox : Engine( double ca, const std::string & ty ) : capacity { ca }, type { ty } { } private: double capacity; std::string type;
public: Wheel( int in ) : inch { in } { } private: int inch;
Car( const std::string & br, const Engine & en, const Wheel & wh ) : brand { br }, engine { en }, wheel { wh } { }
private: std::string brand; Engine engine; Wheel wheel;
int main() { Car crysler { "Crysler", Engine { 6.1, "hemi" }, Wheel { 19 } }; std::cout << crysler.ToString() << std::endl; getchar(); } Jak tutaj wyglądałby kod jeżeli klasa Car miałaby konstruktor o argumentach : string brand; double capacity; string type; int inch; a nie gotowych już Enigne& en oraz const Wheel& wh. |
|
YooSy |
» 2018-01-10 16:21:59 Napisz konstruktory z parametrami w klasach silnik i koło i w liście inicjalizacyjnej konstruktora klasy samochód wywołaj te konstruktory.
|
|
155178 Temat założony przez niniejszego użytkownika |
» 2018-01-10 16:28:44 Kolo::Kolo( int rozmiar ) { this->rozmiar = rozmiar; }
Silnik::Silnik( int moc, int liczbaCylindrow ) { this->moc = moc; this->liczbaCylindrow = liczbaCylindrow; } Tak wyglądają konstruktory tych klas. Właśnie nie wiem w jaki sposób wywołać te konstruktory w liście inicjalizacyjnej konstruktora klasy Samochod. Musi to być konstruktor o podanych w poście wyżej argumentach. To powinno wyglądać jakoś tak ? : Samochod::Samochod( string nazwa, int moc, int liczbaCylindrow, int rozmiarKol ) : Silnik::Silnik( moc, liczbaCylindrow ) , Kolo::Kolo( rozmiarKol ) { this->nazwa = nazwa; } Jak zawrzeć te 4 koła w tym konstruktorze i przypisać je do tej tablicy? Bo przy tej wyżej używam jednego konstruktora klasy Kolo i nie wiem czy w ogóle będzie on miał związak z zawartym w klasie Samochod : Kolo kola[ nkol ]; . Przepraszam za głupie pytania, ale na prawdę się już w tym pogubiłem strasznie, a nigdzie nie mogę znaleźć dokładnie opisanego tego zagadnienia wraz z praktycznymi przykładami. |
|
Monika90 |
» 2018-01-10 16:37:24 class Kolo { public: friend class Samochod; private: explicit Kolo(int) { } };
class Samochod { public: explicit Samochod(int n) : kola{Kolo(n), Kolo(n), Kolo(n), Kolo(n)} { } private: Kolo kola[4]; };
int main() { Samochod s(9); }
a nigdzie nie mogę znaleźć dokładnie opisanego tego zagadnienia wraz z praktycznymi przykładami.
|
To powinno być w każdym podręczniku C++. |
|
155178 Temat założony przez niniejszego użytkownika |
» 2018-01-10 16:59:18 Przerabiam aktualnie "Język C++" Stroustrup'a i jeszcze nie natrafiłem na taką implementację(działu odnośnie kompozycji też nie mogłem znaleźć). Jest to obszerny podręcznik więc być może w końcu do tego dojdę, szukając w internecie nie mogłem nigdzie znaleźć tych informacji z ładnym wytłumaczeniem i przykładami. Czyli mój konstruktor klasy Samochod powinien wyglądać tak : Samochod::Samochod( string nazwa, int moc, int liczbaCylindrow, int rozmiarKol ) : kola { Kolo( rozmiarKol ), Kolo( rozmiarKol ), Kolo( rozmiarKol ), Kolo( rozmiarKol ) }, silnik { Silnik( moc, liczbaCylindrow ) } { this->nazwa = nazwa; } ? Dobrze zrozumiałem ? Wykorzystuję konstruktory jawne Kolo oraz Silnik podczas wywoływania konstruktora Samochod? Czy powyższy zapis jest poprawny? Przy tym dostaję błędy : "Silnik: niedostępny odpowiedni konstruktor domyślny" oraz "Kolo: niedostępny odpowiedni konstruktor domyślny" |
|
Monika90 |
» 2018-01-10 17:09:46 Które wydanie Stroustrupa?
Wygląda na poprawny, choć wg mnie lepiej będzie tak
Samochod::Samochod(string nazwa, int moc, int liczbaCylindrow, int rozmiarKol) : silnik{moc, liczbaCylindrow}, kola{Kolo(rozmiarKol), Kolo(rozmiarKol), Kolo(rozmiarKol), Kolo(rozmiarKol)}, nazwa{nazwa} { }
Zadbaj o to by kolejność na liście inijalizacyjnej była taka sama jak kolejność deklaracji w klasie (chodzi o kolejność składowych silnik, kola, nazwa). |
|
YooSy |
» 2018-01-10 17:09:54 nazwa też powinna być w liście inicjalizacyjnej. |
|
1 2 « 3 » 4 5 |