• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Lista inicjalizacyjna konstruktora

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
1,269 wizyt
pytanie zadane 17 czerwca 2019 w C# przez DobryKurczak Bywalec (2,320 p.)

Witam.

Mam do zrobienia w klasie pochodnej konstruktor bezparametrowy, inicjalizujący oraz kopiujący (co zrobiłem) i w każdym konstruktorze, na liście inicjalizacyjnej wywołać odpowiedni konstruktor klasy bazowej. Problem właśnie w tym, że nie rozumiem za bardzo jak to zrobić. Wrzucam to co zrobiłem. czyli

-klasa Informatyk (pochodna klasy Pracownik)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BibliotekaKlas
{
    class Informatyk : Pracownik
    {
        private string adresEmail;
        private string stronaInternetowa;

        public string AdresEmail
        {
            get { return adresEmail; }
            set { adresEmail = value; }
        }

        public string StronaInternetowa
        {
            get { return stronaInternetowa; }
            set { stronaInternetowa = value; }
        }

        public override Zawody Zawod
        {
            get { return Zawody.Informatyk; }

        }

        public Informatyk() : base()
        {
            this.adresEmail = "";
            this.stronaInternetowa = "";

            { }
            
        }

        public Informatyk(string imie, string nazwisko, Data dataUrodzenia, Adres adresZamieszkania, string adresEmail, string stronaInternetowa): base(imie, nazwisko, dataUrodzenia, adresZamieszkania)
        {
            
            this.adresEmail = adresEmail;
            this.stronaInternetowa = stronaInternetowa;
        }

        public Informatyk(Informatyk wzorzec) : base(wzorzec)
        {
            AdresEmail = wzorzec.adresEmail;
            StronaInternetowa = wzorzec.stronaInternetowa;
        }

        public override Pracownik Clone()
        {
            return new Informatyk(this);
        }

        public override string SzczegolyZawodu()
        {
            return AdresEmail + "\t" + StronaInternetowa;
        }
    }
}

-klasa bazowa Pracownik:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BibliotekaKlas
{
    public class Pracownik
    {
        private string imie;
        private string nazwisko;
        Data dataUrodzenia;
        Adres adresZamieszkania;


        public string Imie
        {
            get { return imie; }
            set { imie = value; }
        }

        public string Nazwisko
        {
            get { return nazwisko; }
            set { nazwisko = value; }
        }

        public Data DataUrodzenia
        {
            get { return dataUrodzenia; }
        }

        public Adres AdresZamieszkania
        {
            get { return adresZamieszkania; }
        }

        virtual public Zawody Zawod
        {
            get { return Zawody.Pracownik; }
        }

        public Pracownik()
        {
             dataUrodzenia = new Data();
             adresZamieszkania = new Adres();

        }

        public Pracownik(string imie, string nazwisko, Data dataUrodzenia, Adres adresZamieszkania)
        {
            this.imie = imie;
            this.nazwisko = nazwisko;
            this.dataUrodzenia = dataUrodzenia;
            this.adresZamieszkania = adresZamieszkania;

        }

        public Pracownik(Pracownik poprzedniPracownik)
        {
            Imie = poprzedniPracownik.imie;
            Nazwisko = poprzedniPracownik.nazwisko;
            dataUrodzenia = poprzedniPracownik.dataUrodzenia;
            adresZamieszkania = poprzedniPracownik.adresZamieszkania;


        }

        virtual public Pracownik Clone()
        {
            return new Pracownik(this);
        }

        public override string ToString()
        {
            return base.ToString();
        }

        public virtual string FormatWyjsciowy()
        {
            return "imię nazwisko:" + Imie + " " + Nazwisko + "\n Data urodzenia: " + dataUrodzenia.Dzien + " " + dataUrodzenia.Miesiac + " " + dataUrodzenia.Rok + "\n Adres zamieszkania: " + " " + adresZamieszkania.Ulica + " " + adresZamieszkania.NumerDomu + " " + adresZamieszkania.Miasto;
        }

        public virtual string SzczegolyZawodu()
        {
            return "brak";
        }

        public string DataToString()
        {
            return "dzień " + dataUrodzenia.Dzien + "miesiąc: " + dataUrodzenia.Miesiac + "rok: " + dataUrodzenia.Rok;

        }

        public string AdresToString()
        {
            return "Ulica: " + adresZamieszkania.Ulica + " numer domu: " + adresZamieszkania.NumerDomu + "miasto " + adresZamieszkania.Miasto;
        }

        public virtual void OdczytConsole()
        {
            Console.Write("Podaj imie pracownika: ");
            imie = Console.ReadLine();
            Console.Write("Podaj nazwisko pracownika: ");
            nazwisko = Console.ReadLine();
            Console.Write("Podaj dzien urodzenia pracownika: ");
            dataUrodzenia.Dzien = int.Parse(Console.ReadLine());
            Console.Write("Podaj miesiac urodzenia pracownika: ");
            dataUrodzenia.Miesiac = Console.ReadLine();
            Console.Write("Podaj rok urodzenia pracownika: ");
            dataUrodzenia.Rok = int.Parse(Console.ReadLine());
            Console.Write("Podaj adres zamieszkania pracownika \n ");
            Console.Write("Ulica ");
            adresZamieszkania.Ulica = Console.ReadLine();
            Console.Write("Numer domu ");
            adresZamieszkania.NumerDomu = Console.ReadLine();
            Console.Write("Miasto ");
            adresZamieszkania.Miasto = Console.ReadLine();

        }

        public virtual void ZapisConsole()
        {

            Console.WriteLine(FormatWyjsciowy());

        }
        public virtual void OdczytXml(DataRow dr)
        {

        }

    }
}

Próbowałem wzorować się na jednym przykładzie z Internetu i zrobiłem taki konstruktor bezparametrowy w klasie Informatyk:

        public Informatyk() : base()
        {
            this.adresEmail = "";
            this.stronaInternetowa = "";
            Informatyk()
                :
            Pracownik();
            { }
            
        }

Ale tu podkreśla mi na czerwono, więc zdecydowanie coś robię źle. Z góry dziękuję za pomoc!

1 odpowiedź

0 głosów
odpowiedź 17 czerwca 2019 przez adrian17 Mentor (354,120 p.)

na liście inicjalizacyjnej wywołać odpowiedni konstruktor klasy bazowej

Problem właśnie w tym, że nie rozumiem za bardzo jak to zrobić

Ale przecież już to robisz?

        public Informatyk() : base()
        {
            this.adresEmail = "";
            this.stronaInternetowa = "";
        }
        public Informatyk(string imie, string nazwisko, Data dataUrodzenia, Adres adresZamieszkania, string adresEmail, string stronaInternetowa): base(imie, nazwisko, dataUrodzenia, adresZamieszkania)
        {
            this.adresEmail = adresEmail;
            this.stronaInternetowa = stronaInternetowa;
        }
        public Informatyk(Informatyk wzorzec) : base(wzorzec)
        {
            AdresEmail = wzorzec.adresEmail;
            StronaInternetowa = wzorzec.stronaInternetowa;
        }

To już jest to, nie?

(btw, poczytaj o auto-properties, sporo boilerplate'u Ci wyrzucą)

komentarz 17 czerwca 2019 przez DobryKurczak Bywalec (2,320 p.)
No właśnie nie wiem za bardzo, czym jest ta lista inicjalizacyjna i po co ona ma służyć, dlatego pytam ;)
komentarz 17 czerwca 2019 przez adrian17 Mentor (354,120 p.)

Lista inicjalizacyjna to akurat bardziej termin C++owy, AFAIK nie używa się go w C#ie.

W każdym razie w C# robi dokładnie to o co zostałeś poproszony w zadaniu:

Klasa(int a, int b) : base(a+b)
{
}

Przy konstruowaniu instancji klasy Klasa, jego konstruktor klasy bazowej zostanie wywołany tak, jak gdybyś wywołał KlasaBazowa(a+b).

Podobne pytania

0 głosów
2 odpowiedzi 993 wizyt
0 głosów
1 odpowiedź 558 wizyt
pytanie zadane 22 grudnia 2019 w C i C++ przez Jacuchna0 Użytkownik (640 p.)
0 głosów
1 odpowiedź 865 wizyt
pytanie zadane 8 października 2018 w PHP przez niezalogowany

93,440 zapytań

142,431 odpowiedzi

322,679 komentarzy

62,802 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...