• 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
552 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ź 460 wizyt
0 głosów
4 odpowiedzi 465 wizyt
pytanie zadane 18 lipca 2015 w C i C++ przez Rappa2 Obywatel (1,540 p.)
0 głosów
3 odpowiedzi 461 wizyt

93,630 zapytań

142,551 odpowiedzi

323,054 komentarzy

63,134 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2174p. - dia-Chann
  2. 2153p. - DziarnowskiJ
  3. 2123p. - Łukasz Piwowar
  4. 2077p. - raydeal
  5. 1989p. - CC PL
  6. 1957p. - Maurycy W
  7. 1954p. - Adrian Wieprzkowicz
  8. 1895p. - rucin93
  9. 1855p. - Michal Drewniak
  10. 1777p. - robwarsz
  11. 1701p. - rafalszastok
  12. 1588p. - Tomasz Bielak
  13. 1491p. - Rafał Trójniak
  14. 1377p. - ssynowiec
  15. 1208p. - Mariusz Fornal
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
...