Wątek przeniesiony 2017-10-26 18:38 z C# i .NET przez somekind.

Dziedziczenie w klasach, tworzenie obiektu.

0

Cześć mam taki problem, zająłem się programowaniem obiektowym i utknąłem na pewnym punkcie. Mianowicie chodzi o to że w programie mam dwie klasy, Przykładowo motor i silnik, w klasie silnik tworzę konstruktor silnik z parametrami liczba biegów i ilośc paliwa. Następnie w klasie motor chciałbym stworzyc konstruktor z parametrami marka, kolor + dwa parametry z klasy silnik. Jaki jest sposób na to żeby klasa motor dziedziczyła cały obiekt silnik i mozliwe było użycie go w kontruktorze klasy motor? Chodzi o cos w stylu "zadeklarowanie zmiennej SIlnik typu silnik. Z góry dzięki jeśli ktoś da radę nakierować na własciwe tory.

2

Dziedziczenie nie ma tu żadnego sensu. Motor może ewentualnie zawierać właściwość/pole silnik. Można to zrobić np. w ten sposób:

    public class Motor
    {
        public Silnik Silnik {get; private set;}
        public Motor(string kolor, string marka, int liczbaBiegow, decimal iloscPaliwa)
        {
            Silnik = new Silnik(liczbaBiegow, iloscPaliwa);
        }
    }
4

Nie baw sie w dziedziczenie jezeli nie czujesz, ze tutaj na prawde przyda sie dziedziczenie. Przewaznie uzywaj kompozycji (cos zawiera sie w czyms)

0

@Progress: dał poprawną odpowiedź, ale lepsza będzie z użyciem interfejsów:

public class Motor
{
    ISilnik Silnik { get; private set; }

    public Motor(ISilnik silnik, string kolor, string marka)
    {
        Silnik = silnik;
     }
}

Oczywiście musisz stworzyć najpierw interfejs ISilnik.
Poza tym kolory powinny iść w odpowiednim typie... Color, int, ale nie string.

I zawsze jeśli chcesz użyć dziedziczenia, zadaj sobie najpierw pytanie: "Czy jedna klasa jest drugą?" Np. "Czy motor jest silnikiem?" Motor nie jest silnikiem. Jest pojazdem. Więc nie powinien dziedziczyć po silniku, ale ewentualnie po jakimś pojeździe. Jednak motor składa się z silnika, więc tutaj należy użyć kompozycji - tak jak napisał @fasadin
(kompozycja to to, co zrobione w tym kodzie, czyli motor posiada silnik).

2
Juhas napisał(a):

@Progress: dał poprawną odpowiedź, ale lepsza będzie z użyciem interfejsów:

Czy interfejsy będą lepsze, to zależy od potrzeb. A tutaj, to akurat początkującemu chyba nie warto mieszać interfejsami jeśli z klasami ma problemy.

Motor nie jest silnikiem. Jest pojazdem.

Technicznie rzecz biorąc, to motor jest mechanizmem przetwarzającym energię elektryczną bądź cieplną w mechaniczną, czyli właśnie silnikiem.
Pojazdem za to jest motocykl. :)

0

Dokładnie chodzi o to, że mam konstruktor w klasie Silnik i teraz chce stworzyć konstruktor w klasie Motor coś takiego:

public Motor (string Kolor, string Marka, Silnik silnik) 

i chcę żeby to prowadziło do tego, że gdy w funkcji głownej dam new Motor to bedzie się on tworzył z parametrami Kolor, Marka i wszystkimi parametrami z klasy silnik(Jakby cały silnik sie tworzył od razu), nie wiem jak to wytłumaczyc

0

No ale dostałeś już rozwiązanie. Potrzebujesz w klasie Motor pola typu Silnik i ustawić jego wartość w konstruktorze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1