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

question-closed Klasa wirtualna problem

Object Storage Arubacloud
0 głosów
337 wizyt
pytanie zadane 26 stycznia 2021 w C i C++ przez matios309 Początkujący (310 p.)
zamknięte 26 stycznia 2021 przez matios309
#include <iostream>
#include <cmath>

using namespace std;

class figura_plaska
{
	public:
		virtual void podaj();
		virtual void wypisz();
		virtual void pole();
		virtual void obwod();
};

class kwadrat :public figura_plaska

{
	float a,b;
	public:
		virtual void podaj()
		{
			cout<<"Podaj dlugosc boku a kwadratu: "<<endl;
			cin>>a;
			cout<<"Podaj dlugosc boku b kwadratu: "<<endl;
			cin>>b;
		}
		
		virtual void wypisz()
		{
			cout<<"Twoj kwadrat ma wymiary: "<<a<<" x "<<b<<endl;
		}
		
		virtual void pole()
		{
			cout<<"Pole twojego kwadratu wynosi: "<<a*b<<endl;
		}
		
		virtual void obwod()
		{
			cout<<"Obwod twojego kwadratu wynosi: "<<2*a+2*b<<endl;
		}
};

class prostokat :public figura_plaska

{
	float a,b;
	public:
		virtual void podaj()
		{
			cout<<"Podaj dlugosc boku a prostokata: "<<endl;
			cin>>a;
			cout<<"Podaj dlugosc boku b prostokata: "<<endl;
			cin>>b;
		}
		
		virtual void wypisz()
		{
			cout<<"Twoj prostokat ma wymiary: "<<a<<" x "<<b<<endl;
		}
		
		virtual void pole()
		{
			cout<<"Pole twojego prostokata wynosi: "<<a*b<<endl;
		}
		
		virtual void obwod()
		{
			cout<<"Obwod twojego prostokata wynosi: "<<2*a+2*b<<endl;
		}
};

class figura_przestrzenna
{
	public:
		virtual void objetosc();
		virtual void podaj();
		virtual void wypisz();
};

class graniastoslup_czworokatny_prosty :public figura_przestrzenna
{
	float a,b,h;
	public:
		virtual void podaj()
		{
			cout<<"Podaj dlugosc boku a podstawy graniastoslupa: "<<endl;
			cin>>a;
			cout<<"Podaj dlugosc boku b podstawy graniastoslupa: "<<endl;
			cin>>b;
			cout<<"Podaj wysokosc h graniastoslupa: "<<endl;
			cin>>h;
		}
		
		virtual void wypisz()
		{
			cout<<"Twoj graniastoslup ma podstawe o wymiarach: "<<a<<" x "<<b<<" oraz o wysokosci: "<<h<<endl;
		}
		
		virtual void objetosc()
		{
			cout<<"Objetosc graniastoslupa wynosi: "<<a*b*h<<endl;
		}
};

int main()
{
	kwadrat A;
	prostokat B;
	graniastoslup_czworokatny_prosty C;
	
	figura_plaska *wsk1;
	wsk1=&A;
	wsk1->podaj();
	wsk1->wypisz();
	wsk1->pole();
	wsk1->obwod();
	
	wsk1=&B;
	wsk1->podaj();
	wsk1->wypisz();
	wsk1->pole();
	wsk1->obwod();
	
	figura_przestrzenna *wsk2;
	wsk2=&C;
	wsk2->podaj();
	wsk2->wypisz();
	wsk2->objetosc();
	return 0;
}

Utwórz klasę opisującą ogólne właściwości płaskiej figury geometrycznej:
(a) zdefiniuj wirtualne funkcje składowe liczące: pole, obwód oraz wypisujące informacje o figurze,
(b) utwórz klasy pochodne z niej (np. prostokąt, kwadrat) i zredefiniuj wirtualne funkcje składowe (pole, obwód),
(c) utwórz na podstawie (a) klasę opisującą figurę przestrzenną (objętość).

 

Podczas kompilacji mam takie errory:

C:\Users\User\AppData\Local\Temp\ccOVZPlZ.o    klasa wirtualna.cpp:(.rdata$.refptr._ZTV19figura_przestrzenna[.refptr._ZTV19figura_przestrzenna]+0x0): undefined reference to `vtable for figura_przestrzenna'

C:\Users\User\AppData\Local\Temp\ccOVZPlZ.o    klasa wirtualna.cpp:(.rdata$.refptr._ZTV13figura_plaska[.refptr._ZTV13figura_plaska]+0x0): undefined reference to `vtable for figura_plaska'

 

Nie mam pojęcia co mogłoby być  tutaj źle :/

komentarz zamknięcia: Kolega niżej pomógł rozwiązać problem :)

1 odpowiedź

+2 głosów
odpowiedź 26 stycznia 2021 przez tangarr Mędrzec (154,860 p.)
wybrane 26 stycznia 2021 przez matios309
 
Najlepsza

Nie zaimplementowałeś funkcji klasy bazowej. Masz dwie opcje:
1. Zaimplementuj brakujące funkcje.
2. Zmień te funkcje na czysto wirtualne.

class figura_plaska
{
    public:
        virtual void podaj() = 0;
        virtual void wypisz() = 0;
        virtual void pole() = 0;
        virtual void obwod() = 0;
};

 

komentarz 26 stycznia 2021 przez matios309 Początkujący (310 p.)
Działa, dzięki wielkie :D

Podobne pytania

0 głosów
3 odpowiedzi 491 wizyt
pytanie zadane 31 października 2017 w C i C++ przez Ditrix Mądrala (5,650 p.)
0 głosów
1 odpowiedź 291 wizyt
pytanie zadane 7 kwietnia 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)
0 głosów
1 odpowiedź 228 wizyt
pytanie zadane 4 października 2016 w C i C++ przez Kasztan Dyskutant (8,080 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

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

...