Ładny brzuch
Witam,
mam do napisania ( przerobienia starego ) programu w celu wykorzystania metod wirtualnych. Nie za bardzo wiem jak to zrobic.
Zdeklarowalem w classie funcje nadajac jej przedrostek virtual - nie wiem co dalej, jak sie do niej odwolywac.
Bardzo prosze o pomoc.
Oto kod:
plik figury.h
#ifndef FIGURY_H #define FIGURY_H enum zbior_figur {f_szescian, f_kolo}; class figura { protected: zbior_figur nazwa; public: void konstruktor(zbior_figur parametr); ~figura(); void pokaz_nazwe(); virtual void rysowanie() const { }; }; class figury_plaskie : public figura { protected: int x,y; public: figury_plaskie(); void rysowanie(); // dla kwadratu void rysowanie(int, int, float); // dla prostokata void rysowanie(int, int, float, float); // dla kola void rysowanie(int, int, int); }; class bryly_3d : public figura { protected: int x,y,z; public: bryly_3d(); void rysowanie(); // dla szescianu void rysowanie(int, int, int, float); // dla prostopadloscianu void rysowanie(int, int, int, float, float, float); // dla kuli void rysowanie(int, int, int, int); }; class kolo : public figury_plaskie { int r; public: kolo(zbior_figur parametr); void narysowanie(); void zmien_rozmiar(); }; class prostopadloscian : public bryly_3d { protected: float a,b,c; public: prostopadloscian(); }; class szescian : public prostopadloscian { float zmienna_pomocnicza; public: szescian(zbior_figur parametr); void narysowanie(); void zmien_rozmiar(); void zmiana_klasy(kolo obiekt); void operator=(float zmienna_pomocnicza2); }; #endif
plik figury.cpp
#include "figury.h" #include <iostream> using namespace std; figura::~figura() { cout << "\nNieszczenie obiektu - zostal uruchomiony destruktor!"; } void figura::konstruktor(zbior_figur parametr) { nazwa = parametr; cout << "Wybrano rysowanie "; switch(nazwa) { case 0 : cout << "szczescianu\n"; break; case 1 : cout << "kuli\n"; break; } } void figura::pokaz_nazwe() { switch(nazwa) { case 0 : cout << "szescian"; break; case 1 : cout << "kolo"; break; } } figury_plaskie::figury_plaskie() { x=0; y=0; } void figury_plaskie::rysowanie(int x, int y, int r) { cout << "Rysowanie figury "; pokaz_nazwe(); cout << ":\n\nsrodek = (" << x << "," << y << ") \npromien: " << r << endl; } bryly_3d::bryly_3d() { x=0; y=0; z=0; } void bryly_3d::rysowanie(int x, int y, int z, float a) { cout << "Rysowanie figury "; pokaz_nazwe(); cout << ":\n\nsrodek = (" << x << "," << y << "," << z <<") \ndlugosc " << a << endl; } kolo::kolo(zbior_figur parametr) { figura::konstruktor(parametr); cout << "Wspolrzedne srodka kola x: "; cin >> x; cout << "Wspolrzedn srodka kola y: "; cin >> y; cout << "Dlugosc promienia: "; cin >> r; narysowanie(); } void kolo::narysowanie() { rysowanie(x,y,r); } void kolo::zmien_rozmiar() { int powiekszenie; cout << "Ile razy powiekszyc? "; cin >> powiekszenie; r = r*powiekszenie; } prostopadloscian::prostopadloscian() { a=0; b=0; c=0; } szescian::szescian(zbior_figur parametr) { figura::konstruktor(parametr); cout << "Wspolrzedna wierzcholka szescianu x: "; cin >> x; cout << "Wspolrzedna wierzcholka szescianu y: "; cin >> y; cout << "Wspolrzedna wierzcholka szescianu z: "; cin >> z; cout << "Dlugosc boku szescianu: "; cin >> a; narysowanie(); } void szescian::narysowanie() { rysowanie(x,y,z,a); } void szescian::zmien_rozmiar() { int powiekszenie; cout << "Ile razy powiekszyc? "; cin >> powiekszenie; a = a*powiekszenie; } void szescian::zmiana_klasy(kolo obiekt) { } void szescian::operator=(float zmienna_pomocnicza2) { zmienna_pomocnicza = zmienna_pomocnicza2; // niby dziala - nie jest profesjonalnie zrobione, ale coz... }
plik main.cpp
#include <iostream> #include "figury.h" using namespace std; int main() { int cowmenu; cout << "Wybierz z menu: \n[1] szescian \n[2] kolo\n" << endl; cout << "\nPodaj wartosc: "; cin >> cowmenu; switch (cowmenu) { case 1: { //figura* foo = new kolo; //foo->rysowanie(); szescian foo(f_szescian); foo.zmien_rozmiar(); foo.narysowanie(); cout << "\nWywolujemy konstruktor konwersji i tworzyby obiekt kuli..."; getchar(); getchar(); foo.zmiana_klasy(f_kolo); break; } case 2: { kolo foo(f_kolo); foo.zmien_rozmiar(); foo.narysowanie(); break; } default: { cout << "BLAD, wybierz 1 lub 2!! Prosze nie kombinowac :)" << endl; } } return 0; }
Dzieki za pomoc.
Pozdrawiam.
nie przeladowuj rysuj w jednej klasie, tylko wrzuc rysuj do kazdej klasy osobno, oczywiscie takie jakie powinno byc w danej klasie.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
mam do napisania ( przerobienia starego ) programu w celu wykorzystania metod wirtualnych. Nie za bardzo wiem jak to zrobic.
Zdeklarowalem w classie funcje nadajac jej przedrostek virtual - nie wiem co dalej, jak sie do niej odwolywac.
Bardzo prosze o pomoc.
Oto kod:
plik figury.h
#ifndef FIGURY_H #define FIGURY_H enum zbior_figur {f_szescian, f_kolo}; class figura { protected: zbior_figur nazwa; public: void konstruktor(zbior_figur parametr); ~figura(); void pokaz_nazwe(); virtual void rysowanie() const { }; }; class figury_plaskie : public figura { protected: int x,y; public: figury_plaskie(); void rysowanie(); // dla kwadratu void rysowanie(int, int, float); // dla prostokata void rysowanie(int, int, float, float); // dla kola void rysowanie(int, int, int); }; class bryly_3d : public figura { protected: int x,y,z; public: bryly_3d(); void rysowanie(); // dla szescianu void rysowanie(int, int, int, float); // dla prostopadloscianu void rysowanie(int, int, int, float, float, float); // dla kuli void rysowanie(int, int, int, int); }; class kolo : public figury_plaskie { int r; public: kolo(zbior_figur parametr); void narysowanie(); void zmien_rozmiar(); }; class prostopadloscian : public bryly_3d { protected: float a,b,c; public: prostopadloscian(); }; class szescian : public prostopadloscian { float zmienna_pomocnicza; public: szescian(zbior_figur parametr); void narysowanie(); void zmien_rozmiar(); void zmiana_klasy(kolo obiekt); void operator=(float zmienna_pomocnicza2); }; #endif
plik figury.cpp
#include "figury.h" #include <iostream> using namespace std; figura::~figura() { cout << "\nNieszczenie obiektu - zostal uruchomiony destruktor!"; } void figura::konstruktor(zbior_figur parametr) { nazwa = parametr; cout << "Wybrano rysowanie "; switch(nazwa) { case 0 : cout << "szczescianu\n"; break; case 1 : cout << "kuli\n"; break; } } void figura::pokaz_nazwe() { switch(nazwa) { case 0 : cout << "szescian"; break; case 1 : cout << "kolo"; break; } } figury_plaskie::figury_plaskie() { x=0; y=0; } void figury_plaskie::rysowanie(int x, int y, int r) { cout << "Rysowanie figury "; pokaz_nazwe(); cout << ":\n\nsrodek = (" << x << "," << y << ") \npromien: " << r << endl; } bryly_3d::bryly_3d() { x=0; y=0; z=0; } void bryly_3d::rysowanie(int x, int y, int z, float a) { cout << "Rysowanie figury "; pokaz_nazwe(); cout << ":\n\nsrodek = (" << x << "," << y << "," << z <<") \ndlugosc " << a << endl; } kolo::kolo(zbior_figur parametr) { figura::konstruktor(parametr); cout << "Wspolrzedne srodka kola x: "; cin >> x; cout << "Wspolrzedn srodka kola y: "; cin >> y; cout << "Dlugosc promienia: "; cin >> r; narysowanie(); } void kolo::narysowanie() { rysowanie(x,y,r); } void kolo::zmien_rozmiar() { int powiekszenie; cout << "Ile razy powiekszyc? "; cin >> powiekszenie; r = r*powiekszenie; } prostopadloscian::prostopadloscian() { a=0; b=0; c=0; } szescian::szescian(zbior_figur parametr) { figura::konstruktor(parametr); cout << "Wspolrzedna wierzcholka szescianu x: "; cin >> x; cout << "Wspolrzedna wierzcholka szescianu y: "; cin >> y; cout << "Wspolrzedna wierzcholka szescianu z: "; cin >> z; cout << "Dlugosc boku szescianu: "; cin >> a; narysowanie(); } void szescian::narysowanie() { rysowanie(x,y,z,a); } void szescian::zmien_rozmiar() { int powiekszenie; cout << "Ile razy powiekszyc? "; cin >> powiekszenie; a = a*powiekszenie; } void szescian::zmiana_klasy(kolo obiekt) { } void szescian::operator=(float zmienna_pomocnicza2) { zmienna_pomocnicza = zmienna_pomocnicza2; // niby dziala - nie jest profesjonalnie zrobione, ale coz... }
plik main.cpp
#include <iostream> #include "figury.h" using namespace std; int main() { int cowmenu; cout << "Wybierz z menu: \n[1] szescian \n[2] kolo\n" << endl; cout << "\nPodaj wartosc: "; cin >> cowmenu; switch (cowmenu) { case 1: { //figura* foo = new kolo; //foo->rysowanie(); szescian foo(f_szescian); foo.zmien_rozmiar(); foo.narysowanie(); cout << "\nWywolujemy konstruktor konwersji i tworzyby obiekt kuli..."; getchar(); getchar(); foo.zmiana_klasy(f_kolo); break; } case 2: { kolo foo(f_kolo); foo.zmien_rozmiar(); foo.narysowanie(); break; } default: { cout << "BLAD, wybierz 1 lub 2!! Prosze nie kombinowac :)" << endl; } } return 0; }
Dzieki za pomoc.
Pozdrawiam.
nie przeladowuj rysuj w jednej klasie, tylko wrzuc rysuj do kazdej klasy osobno, oczywiscie takie jakie powinno byc w danej klasie.