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

klasy c++ dziwny błąd

Cloud VPS
0 głosów
400 wizyt
pytanie zadane 18 stycznia 2022 w C i C++ przez Fluxik Nowicjusz (240 p.)
#include <iostream>

using namespace std;

class B
{
protected:
	string* tekst;
public:
	B() : tekst(new string [2] {" "," "}) {}
	B(const string& a) : tekst(new string [2] {a,a}) {}
	B(const string& a1, const string& a2) : tekst(new string [2] {a1,a2}) {}

	virtual void txt1() const = 0;
	virtual void txt2() const = 0;

	friend ostream& operator << (ostream&, const B&);

	virtual void wypisz(ostream&) const = 0;
};

ostream& operator << (ostream& out, const B& a)
{
	return a.wypisz(out);
}


class P1 : public B
{
protected:
	B be;
public:
	P1(const string& a1, const string& a2) : be(a1,a2) {}

	void wypisz(ostream& out) const
	{
		return out << tekst[0] << ' ' << tekst[1];
	}

	void txt1() const
	{
		cout << be.tekst[0];
	}

	void txt2() const
	{
		cout << be.tekst[1];
	}
};

class P2 : public P1
{
	double liczba;
public:
	P2(const string& a1, const string& a2, int a3) : P1(a1,a2), liczba(a3) {}

	void wypisz(ostream& out) const
	{
		return out << tekst[0] << ' ' << tekst[1] << ' ' << liczba;
	}

	void txt1() const
	{
		cout << 's';
	}

	void txt2() const
	{
		cout << 'a';
	}
};


int main()
{
	const P1* wsk1 = new P1("coffee","bar");
	// const P2* wsk2 = new P2("white","coffe",1.50);
	// const P1* wsk3 = new P1("thank","you");
	// B ob1("-------------");
cout << *wsk1;
	// cout << wsk1->txt1(); << " " << wsk1->txt2() <<endl;
	// cout << wsk2->txt1() << " " << wsk2->txt2() <<" "
	// 	<< wsk2->w1() << endl;
	// cout << *wsk3 << endl;

	// P1 x = *wsk1; delete wsk1; wsk1=0;
	// P2 y = *wsk2; delete wsk2; wsk2=0;
	// P1 z = *wsk3; delete wsk3; wsk3=0;


	// tab1[0] = new B(ob1);
	// tab1[1] = new P2(y);
	// tab1[2] = new B(ob1);
	// tab1[3] = new B(ob1);

	// for(int i=0; i<4; ++i){
	// 	cout << *tab1[i];
	// 	delete tab1[i];

   
}

błąd: cannot declare field 'p1::be' to be of abstract type 'B'

Siedzę nad tym ze znajomymi już dłuższy czas i nie mamy pojęcia o co chodzi z tym błędem.

 

1 odpowiedź

0 głosów
odpowiedź 18 stycznia 2022 przez Szfierzak Gaduła (3,750 p.)
Nie można tworzyć obiektów klasy abstrakcyjnej, dlatego nie stworzycie obiektu klasy B. Poza tym skoro P1 dziedziczy po B i patrząc na przykład to pole klasy B w P1 nie jest potrzebne.
komentarz 18 stycznia 2022 przez Fluxik Nowicjusz (240 p.)
Pole klasy B w P1 jest narzucone odgórnie. To jest zadanie do szkoły i w jego treści jest napisane, że klasa P1 posiada jedno pole typu B.
komentarz 18 stycznia 2022 przez TOM_CPP Pasjonat (22,640 p.)
Jaka jest treść zadania? Klasa abstrakcyjna służy jako interfejs w dziedziczeniu i nie można tworzyć obiektów tego typu.

Podobne pytania

+1 głos
2 odpowiedzi 541 wizyt
pytanie zadane 10 października 2021 w C i C++ przez <młody_programista> Początkujący (450 p.)
0 głosów
2 odpowiedzi 805 wizyt
pytanie zadane 1 stycznia 2023 w C i C++ przez benny13 Obywatel (1,150 p.)
0 głosów
0 odpowiedzi 481 wizyt
pytanie zadane 18 listopada 2020 w C i C++ przez Eriss69 Gaduła (4,470 p.)

93,469 zapytań

142,404 odpowiedzi

322,716 komentarzy

62,852 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

Kursy INF.02 i INF.03
...