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

Dziedziczenie, a operatory zasigu

Object Storage Arubacloud
0 głosów
153 wizyt
pytanie zadane 4 czerwca 2018 w C i C++ przez KlemensGak Bywalec (2,210 p.)

Cześć!

Potrzebuje wyjaśnienia pewnego błędu, którego nie rozumiem związanego z operatorem zasięgu. W poniższym w poniższym przykładzie użyłem jak zwykle przykładu z dziedziczeniem. Mam dwie klasy: "MyInteger" oraz EvenInteger. Kiedy Zaznaczam, że EvenInteger jest dziedzicem od MyInteger wyskakuje mi komunikat "Not maching function for call MyInteger to MyInteger. To jest zbyt prostu przykład by coś tu poszło nie tak i by się upewnić, że nie popełniłem tu żadnego błędu robię go już 3 raz, jednakże nie działa.

myIiteger.h

#ifndef MYINTEGER_H
#define MYINTEGER_H

class MyInteger
{
    public:
        MyInteger(int v);
        ~MyInteger();
        int getValue();
        void setValue(int v);

    private:
        int val;
};

#endif // MYINTEGER_H

myinteger.cpp

#include "myinteger.h"

MyInteger::MyInteger(int v=0)    {val=v;}
MyInteger::~MyInteger()          {}
int MyInteger::getValue()        {return val;}
void MyInteger::setValue(int v)  {val=v;}

eveninteger.h

#ifndef EVENINTEGER_H
#define EVENINTEGER_H
#include "myinteger.h"

class EvenInteger : public MyInteger
{
    public:
        EvenInteger();
        ~EvenInteger();

    private:
};

#endif // EVENINTEGER_H

eveninteger.cpp

#include "eveninteger.h"

EvenInteger::EvenInteger()
{
    //ctor
}

EvenInteger::~EvenInteger()
{
    //dtor
}

 

1 odpowiedź

+1 głos
odpowiedź 4 czerwca 2018 przez monika90 Pasjonat (22,940 p.)
wybrane 4 czerwca 2018 przez KlemensGak
 
Najlepsza

Możesz przenieść definicję domyślnego parametru konstruktora z pliku myinteger.cpp do myinteger.h, to znaczy:

w pliku myinteger.h będzie

class MyInteger
{
    public:
        MyInteger(int v = 0);

a w pliku myinteger.cpp

MyInteger::MyInteger(int v)    {val=v;}

i to powinno pomóc.

A błąd miałeś dlatego że konstruktor klasy EvenInteger musi wywołać konstruktor klasy MyInteger, a klasa MyInteger ma konstruktor który wymaga jednego argumentu. Skąd konstruktor EvenInteger ma wiedzieć jaka ma być wartość tego argumentu? Wiec albo wyposażysz klasę MyInteger w konstruktor domyślny, tak jak widzisz powyżej, albo powiesz konstruktorowi klasy EvenInteger jakiego argumentu ma użyć, co wyglądało by na przykład tak:

EvenInteger::EvenInteger()
: MyInteger(-9)
{
}

 

komentarz 4 czerwca 2018 przez KlemensGak Bywalec (2,210 p.)
Dziękuję Ci bardzo! :)

Dzięki Tobie mi to już działa, a co ważniejsze - rozumiem to. :)
komentarz 6 czerwca 2018 przez monika90 Pasjonat (22,940 p.)
Jeszcze jedno, klasa EvenInteger nie powinna dziedziczyć po MyInteger bo nie jest podtypem.

Podobne pytania

0 głosów
2 odpowiedzi 819 wizyt
0 głosów
2 odpowiedzi 505 wizyt
0 głosów
3 odpowiedzi 594 wizyt
pytanie zadane 22 stycznia 2016 w C i C++ przez Remo Początkujący (280 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

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

...