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

Lista inicjalizacyjna konstruktora

Object Storage Arubacloud
0 głosów
1,045 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 Ekspert (344,860 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 Ekspert (344,860 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 832 wizyt
0 głosów
1 odpowiedź 357 wizyt
pytanie zadane 22 grudnia 2019 w C i C++ przez Jacuchna0 Użytkownik (640 p.)
0 głosów
1 odpowiedź 697 wizyt
pytanie zadane 8 października 2018 w PHP przez niezalogowany

92,551 zapytań

141,393 odpowiedzi

319,524 komentarzy

61,936 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...