C++ klasy i dziedziczenie
pomagacz:
Witam, wczoraj poradziliśmy sobie z potęgowaniem w pętli
for a dzisiaj postanowiłem
przećwiczyć klasy i dziedziczenie. Ogólnie wymyśliłem taki program, który tworzy obiekt
"wielokat" oraz odziedziczone "trójkąt, kwadrat, prostokąt i okrąg" a w programie głównym
oblicza sumę obwodów. Podam może kod programu
KOD:
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
class wielokat
{
public virtual float OblObw() = 0;
};
class trojkat

ublic virtual wielokat
{
public:
trojkat();
public virtual float OblObw()
{
return (bokA + bokB + bokC);
private:
float bokA,bokB, bokC;
}
};
class kwadrat

ublic virtual wielokat
{
public:
kwadrat();
public virtual float OblObw()
{
return (4*bokA);
private:
float bokA;
}
};
class prostokat

ublic virtual wielokat
{
public:
prostokat()
{
return (2*bokA + 2*bokB);
private:
float bokA, bokB;
}
};
class okrag

ublic virtual wielokat
{
public:
okrag()
{
return (2*pi()*r);
private:
float r;
}
};
trojkat::trojkat()
{
cout << "Podaj dlugosci bokow trojkata: " << endl;
cout << "Podaj bok A: " << endl;
cin >> bokA;
cout << "Podaj bok B: " << endl;
cin >> bokB;
cout << "Podaj bok C: " << endl;
cin >> bokC;
};
kwadrat::kwadrat()
{
cout << "Podaj dlugosc boku kwadratu: " << endl;
cout << "Podaj bok A: " << endl;
cin >> bokA;
};
prostokat:

rostokat()
{
cout << "Podaj dlugosci bokow prostokata: " << endl;
cout << "Podaj bok A: " << endl;
cin >> bokA;
cout << "Podaj bok B: " << endl;
cin >> bokB;
};
okrag:

krag()
{
cout << "Podaj dlugosc promienia okregu: " << endl;
cin >> r;
};
int main(int argc, char *argv[])
{
char opcja;
float suma;
bool x=true;
wielokat* tab[16];
int l=0;
while(x==true)
do
{
cout << "Wybierz jaki obiekt chcesz utworzyć:" << endl;
cout << "T − trojkat," << endl;
cout << "K − kwadrat," << endl;
cout << "P − prostokat," << endl;
cout << "O − okrag," << endl;
cout << "S − suma obwodow," << endl;
cout << "Q − wyjscie z programu." << endl;
switch(opcja)
{
case 'T':
{
tab[l] = new trojkat();
l++;
}break;
case 'K':
{
tab[l] = new kwadrat();
l++;
}break;
case 'P':
{
tab[l] = new prostokat();
l++;
}break;
case 'O':
{
tab[l] = new okrag();
l++
}break;
case 'Q':
{
x = false;
}break;
case 'S':
{
suma = 0;
for (int i = 0 ; i < l ; i++)
suma += tab[i] −> OblObw();
cout << "Suma obwodow wynosi: " << suma << endl;
}break;
}
}while(opcja != Q);
system("PAUSE");
return EXIT
SUCCESS;
}
KONIEC KODU.
b.: Podałeś kod, i co dalej?
Tak na oko coś z klamerkami jest nie tak. Powinno raczej być
public virtual float OblObw()
{
return (4*bokA);
}; // czy tu srednik, nie jestem pewien
private: ...
Jeszcze taka drobna uwaga: okrąg nie jest wielokątem
b.: Nie jestem też do końca przekonany do Twojej kolejności nauki (programowanie obiektowe i
dziedziczenie w sytuacji, gdy chyba masz jeszcze kłopoty z pętlami

), ale może jestem
staromodny