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

Dziedziczenie w c++

Object Storage Arubacloud
0 głosów
390 wizyt
pytanie zadane 11 czerwca 2018 w C i C++ przez szymek2807 Nowicjusz (150 p.)
edycja 12 czerwca 2018 przez szymek2807

Potrzebuje pomocy w zadaniu z dziedziczenia..
Wklejam cały mój kod źródłowy jakby ktoś chciał odpalić u siebie, korzystam z visual studio 2017
Chciałem wyświetlić to co znajduje się metodzie Main lecz nie wiem co robię źle
Ktoś ma jakiś pomysł ?

#include <iostream>
#include <fstream>
#include <conio.h>
#include <conio.h>
#include <stdio.h>
#include <string>
using namespace std;
#pragma warning(default:4716)

class Osoba
{
private:
    string imie ;
    string nazwisko ;
    string dataUrodzenia ;
public:
    Osoba() {}
    Osoba(string n)  : imie(n) , nazwisko(n) , dataUrodzenia(n) {};
    
    ~Osoba() { cout << "Usunieto Obiekt" << endl; }
    void  WypiszInfo() {
        cout << "Imie: " << imie << endl;
        cout << "Nazwisko: " << nazwisko << endl;
        cout << "Data Urodzenia: " << dataUrodzenia << endl;
    }
};

class Student : public Osoba
{
private:
    int rok ;
    int grupa ;
    int nrIndeksu;
public:
    Student() {};
    Student( const int r) : rok(r) , grupa(r) , nrIndeksu(r) {};
     void WypiszInfo() {
        cout << "Rok: " << rok << endl;
        cout << "Grupa " << grupa << endl;
        cout << "Nr Indeksu " << nrIndeksu << endl;
    }
};

class Pilkarz : public Osoba
{
private:
    string pozycja ;
    string klub ;
    int liczbaGoli = 0;
public:
    Pilkarz() {};
    Pilkarz(const string &n, const int r) : pozycja(n) , klub(n) , liczbaGoli(r) {};
    void WypiszInfo() {
        cout << "Pozycja: " << pozycja << endl;
        cout << "Klub: " << klub<< endl;
        cout << "Liczba Goli: " << liczbaGoli << endl;
    }
};

int main() {
     Osoba O("Kamil", "Kot", "10.10.1990");
     O.WypiszInfo();

     Student s("Kacper", "Nowak", "15.10.1995", 3, 5, 2523);
     s.WypiszInfo();

     Pilkarz p("Marek", "Dach", "18.12.1997", "Napastnik", "FC Kot", 10);
     p.WypiszInfo();

     getchar();
     return 0;
 }

 

1 odpowiedź

0 głosów
odpowiedź 11 czerwca 2018 przez RafalS VIP (122,820 p.)
wybrane 12 czerwca 2018 przez szymek2807
 
Najlepsza
Osoba(string n) : imie(n) , nazwisko(n) , dataUrodzenia(n) {};
Osoba O("Kamil", "Kot", "10.10.1990");

Klasa Osoba nie ma konstruktora Osoba(string, string, string).

A konstruktor klasy pochodnej automatycznie wywołuje konstruktor klasy bazowej. Jeśli takiego nie ma to trzeba wywołać go jawnie na liście inicjalizacyjnej np tak:

Student(const int r) : Osoba("tu","trzeba","podac"), rok(r), grupa(r), nrIndeksu(r) {};

 

komentarz 12 czerwca 2018 przez szymek2807 Nowicjusz (150 p.)
Dalej to samo pokazuje mi:
Błąd    C2661    "Osoba::Osoba": brak przeciążonej funkcji przyjmującej 3 argumenty  wiersz 36
komentarz 12 czerwca 2018 przez RafalS VIP (122,820 p.)

Kompilator napisał Ci to samo co ja. Pierwszym bledem jest to ze klasa Osoba nie ma konstruktora z 3 stringami. 

Teraz próbujesz zrobić cos takiego:

void f(string s){cout<<s<<endl;}
....
f("a", "b","c");

Potem bedziesz mumusial wywolywac konstruktory klas bazowych na liscie inicjalizacyjnej klasy pochodnej. Jesli chcesz wpisac wartosci prywatnych pol z klasy bazowej. Inny sposob to metody set, ale u Ciebie ich nie ma wiec zapeoponowalem konstruktor na liscie inicjalizacyjnej.

Podobne pytania

0 głosów
1 odpowiedź 193 wizyt
pytanie zadane 11 grudnia 2019 w C i C++ przez Jacuchna0 Użytkownik (640 p.)
0 głosów
1 odpowiedź 558 wizyt
pytanie zadane 15 marca 2019 w C i C++ przez Drax Użytkownik (630 p.)
0 głosów
1 odpowiedź 676 wizyt

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 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!

...