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

Gdzie jest błąd (c++)?

0 głosów
554 wizyt
pytanie zadane 12 lutego 2019 w C i C++ przez Fan Początkujący (250 p.)

Gdzie jest błąd?

#include <iostream>

using namespace std;

class Ksztalt
{
    virtual void oblicz_pole()=0;
    //czysta funkcja wirtalna

};
class Kolo :public Ksztalt
{
    float r;
public:

    Kolo(float x)
    {
        r = x;
    }
virtual void oblicz_pole()
{
    cout<<"Pole kola :"<<3.14*r*r<<endl;
}

};
////////////////////////////////////
class Kwadrat :public Ksztalt
{
    float a;
    public:
    Kwadrat(float x)
    {
        a = x;
    }
    virtual void oblicz_pole()
    {
        cout<<"Pole kwadratu:"<<a*a<<endl;
    }
};
int main()
{
    Kolo k1(1);
    Kwadrat kw(2);

    Ksztalt *wsk;
    wsk = &k;
    wsk -> oblicz_pole();

    wsk = &kw;
    wsk -> oblicz_pole();
    return 0;
}

 

3 odpowiedzi

+1 głos
odpowiedź 12 lutego 2019 przez Michał Gibas Pasjonat (19,630 p.)
Może powiesz nam co to za błąd? Za mało informacji. Kompilator czy linker coś wyrzuca? Czy może program nie działa tak jak oczekiwałeś? Sprecyzuj pytanie... to nie jest tak że wklejasz kod i po prostu mówisz: "znajdźcie błąd", co to jakaś łamigłówka czy co ? ;)
1
komentarz 13 lutego 2019 przez obl Maniak (51,300 p.)

Na pewno mu wyrzuca, że zmienna k nie istnieje :)

+1 głos
odpowiedź 13 lutego 2019 przez obl Maniak (51,300 p.)
    wsk = &k;

A gdzie utworzyłeś zmienną k? Utworzyłeś zmienną k1 typu Koło i zmienną kw typu Kwadrat.

0 głosów
odpowiedź 12 lutego 2019 przez marakuja Użytkownik (590 p.)
edycja 13 lutego 2019 przez marakuja

Cześć, nie możesz dać czegoś takiego w tym przypadku:
 

Ksztalt *wsk = ....

Wynika to z tego, ze klasa Ksztalt ma tylko metodę wirtualną i nic więcej, a co za tym idzie jest klasa abstrakcyjną. Nie można tworzyć obiektów klasy abstrakcyjej.

Tutaj jest działający poprawiony kod:)
 

#include <iostream>
 
using namespace std;
 
class Ksztalt
{
    virtual void oblicz_pole()=0;
    //czysta funkcja wirtalna
 
};

class Kolo :public Ksztalt
{
    float r;
public:
 
    Kolo(float x)
    {
        r = x;
    }
virtual void oblicz_pole()
{
    cout<<"Pole kola :"<<3.14*r*r<<endl;
}
 
};
////////////////////////////////////
class Kwadrat :public Ksztalt
{
    float a;
    public:
    Kwadrat(float x)
    {
        a = x;
    }
    virtual void oblicz_pole()
    {
        cout<<"Pole kwadratu:"<<a*a<<endl;
    }
};
int main()
{
    Kolo k1(1);
    Kwadrat kw(2);
    Kolo *wsk;
    wsk = &k1;


    wsk -> oblicz_pole();
    Kwadrat *wsk1;
    wsk1 = &kw;
    wsk1 -> oblicz_pole();
    return 0;
}

 

Pozdrawiam:)

 

@EDIT
W komentarzu poprawne roziazanie problemu:)

komentarz 13 lutego 2019 przez damianeqe Gaduła (4,380 p.)
Ten zapis Ksztalt *wsk; jest poprawny, ponieważ nie tworzysz obiektu klasy abstrakcyjnej, tworzysz wskaźnik na typ Kształt.
komentarz 13 lutego 2019 przez marakuja Użytkownik (590 p.)
Tak, zgadza sie, mój bład:)

Oprócz tego, że zapomniales dac "k1" zamiast "k" to jest błąd w klasie Ksztalt.
Funkcja virtualna nie jest dziedziczona bo jest prywatna. Rozwiązaniem problemu będzie dodanie słowa kluczowego "Public:" na początku klasy Ksztalt:)

Podobne pytania

0 głosów
1 odpowiedź 462 wizyt
0 głosów
4 odpowiedzi 466 wizyt
pytanie zadane 18 lipca 2015 w C i C++ przez Rappa2 Obywatel (1,540 p.)
0 głosów
3 odpowiedzi 462 wizyt

93,631 zapytań

142,553 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1811p. - rafalszastok
  13. 1600p. - Rafał Trójniak
  14. 1588p. - Tomasz Bielak
  15. 1494p. - ssynowiec
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...