matematykaszkolna.pl
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 trojkatublic virtual wielokat { public: trojkat(); public virtual float OblObw() { return (bokA + bokB + bokC); private: float bokA,bokB, bokC; } }; class kwadratublic virtual wielokat { public: kwadrat(); public virtual float OblObw() { return (4*bokA); private: float bokA; } }; class prostokatublic virtual wielokat { public: prostokat() { return (2*bokA + 2*bokB); private: float bokA, bokB; } }; class okragublic 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 EXITSUCCESS; } KONIEC KODU.
26 paź 18:44
Trivial: nic tu nie widać. http://pastebin.com/
26 paź 23:11
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 emotka
26 paź 23:28
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 emotka ), ale może jestem staromodny emotka
26 paź 23:32