Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wykorzystanie konstruktorów klasy zaprzyjaźnionej w innej klasie

Ostatnio zmodyfikowano 2018-01-11 23:40
Autor Wiadomość
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
C/C++
#pragma once
#include<iostream>
//#include"DodatkoweWyposazenie.h"
#include"Silnik.h"
#include"Kolo.h"
#define nkol 4

using namespace std;

class Samochod
{
    Silnik * silnik;
    Kolo * kola[ nkol ];
    string nazwa;
    DodatkoweWyposazenie * wyposazenie[ nwyp ];
    //Samochod(string nazwa, int moc, int liczbaCylindrow, int rozmiarKol);
public:
    Samochod( const Samochod & samochod );
    //Samochod dajWzorzec(string nazwa, int moc, int liczbaCylindrow, int rozmiarKol);
    //void wyswietlSpecyfikacje();
    //void dodajWyposazenie(DodatkoweWyposazenie wyposazenie);
    ~Samochod();
};

KOLO.h
C/C++
#pragma once
class Kolo
{
    friend class Samochod;
    int rozmiar;
    Kolo( int rozmiar );
public:
    int getRozmiar();
    ~Kolo();
};

SILNIK.h
C/C++
#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 :
C/C++
Kolo::Kolo( int rozmiar )
{
    this->rozmiar = rozmiar;
}

Silnik :
C/C++
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 :
C/C++
Samochod::Samochod( string nazwa, int moc, int liczbaCylindrow, int rozmiarKol )
    : Silnik::Silnik( moc, liczbaCylindrow )
    : Kolo::Kolo( rozmiarKol )
{
    this->nazwa = nazwa;
}

C/C++
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.
P-168355
mateczek
» 2018-01-02 17:06:18
skoro masz klase zawierającą wskaźniki na elementy innej klasy. to zwyczajnie
C/C++
Samochod::Samochod( string nazwa, int moc, int liczbaCylindrow, int rozmiarKol )
{
    this->nazwa = nazwa;
    silnik = new Silnik( moc, liczbaCylindrow )
    kolo = new Kolo( rozmiarKol )
}
//lub
Samochod::Samochod( string nazwa, int moc, int liczbaCylindrow, int rozmiarKol )
    : silnik( new Silnik( moc, liczbaCylindrow ) )
{
    this->nazwa = nazwa;
}
P-168356
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 ? :
C/C++
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;
}
 
P-168357
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.
P-168358
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.
P-168359
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
P-168362
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.
P-168370
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.
P-168374
« 1 » 2 3 4 5
  Strona 1 z 5 Następna strona