Ĺadny brzuch
Witam wszystkich!
Piszę projekt na zaliczenie z c++. Do napisania mam program pokazujący rozkład ciepła na "płytce". Do tego zadania zaprzegłem Qt (jako gui), Qwt (do rysowania wykresów i spektrogramów). Wszystko ładnie się rysuje tylko rozwiązanie nie jest eleganckie <_< mam klasy:
problem polega na tym, że robię w konstruktorze obu wykresów
Obliczenia *ob; ob = new Obliczenia();
a chciałbym to zrobić w jak najbardziej elegancki sposób...
Czy wyjściem jest przerobienie klasy na statyczną?
Masz wiele alternatywnych rozwiązań. Jeżeli obliczenia są faktycznie skomplikowane, to twoje jest najgorszym z nich :)
Możesz faktycznie zrobić klasę statyczną i wtedy np wywołać Obliczenia::getObliczenia(). Możesz też zrobić metodę "void setObliczenia(const Obliczenia &obliczenia)", w klasie bazowej po twoich klasach Plot i PlotSpek i dam dodawać utworzony gdzieś na zewnątrz obiekt Obliczenia.
Zawsze można zrobić singletona, lepsze to niz "klasa statyczna". http://en.wikipedia....ngleton_pattern
Użytkownik icek edytował ten post 13 maj 2010, 19:43
Zawsze można zrobić singletona, lepsze to niz "klasa statyczna". http://en.wikipedia....ngleton_pattern
Tylko że singleton to klasa statyczna :)
Tylko że singleton to klasa statyczna :)
To już kwestia implementacji.
@Pravi
Popatrz na to z tej perspektywy, że klasy od rysowania powinny jedynie wiedzieć co i jak narysować, a nie jak to obliczyć wykorzystując klasę Obliczenia. Stąd obliczenia wykonuj poza ploterami, a do nich przekazuj same wyniki.
problem polega na tym, że robię w konstruktorze obu wykresów
+ wypowiedz reVisa
to nie plot powinien liczyc (zadawac zapytanie liczenia innej klasie), powinien tylko dostac dane co narysowac.
eugeniusz: zdefiniuj mi co to klasa statyczna wg Ciebie.
eugeniusz: zdefiniuj mi co to klasa statyczna wg Ciebie.
To wszystko przez wypowiedź autora wątku, bo pisząc "przerobić klasę na statyczną" zrozumiałem to właśnie jako: przerobić klasę na taką, która zwraca swój obiekt statyczny (czyli singleton), choć teraz po krótkim zastanowieniu wpadłem, że mogło mu chodzić o stworzenie obiektu statycznego tej klasy.
Co do pytania - nie wiem. Ale klasa statyczna to może być taka, która ma wszystkie metody i pola statyczne :)
-----------------------------------
Ale żeby nie robić off-topów:
Jakby się zastanowić, to zapewne obiekt klasy Plot nie ma sensu bez obiektu klasy Obliczenia - bo taki plot nic nie narysuje. Może więc dobrym rozwiązaniem by było zrobić konstruktor na przykład:
Plot(const Obliczenia &obliczenia);
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Piszę projekt na zaliczenie z c++. Do napisania mam program pokazujący rozkład ciepła na "płytce". Do tego zadania zaprzegłem Qt (jako gui), Qwt (do rysowania wykresów i spektrogramów). Wszystko ładnie się rysuje tylko rozwiązanie nie jest eleganckie <_< mam klasy:
- lPlot - wykres pokazujący płytke w postaci punktów; dziedziczony po QwtPlot
llPlotSpek - spektogram; dziedziczony po QwtPlot
llObliczenia - wszelkie obliczenia potrzebne do obliczania temp i współrzędnych punktów; brak dziedziczenial
problem polega na tym, że robię w konstruktorze obu wykresów
Obliczenia *ob; ob = new Obliczenia();
a chciałbym to zrobić w jak najbardziej elegancki sposób...
Czy wyjściem jest przerobienie klasy na statyczną?
Masz wiele alternatywnych rozwiązań. Jeżeli obliczenia są faktycznie skomplikowane, to twoje jest najgorszym z nich :)
Możesz faktycznie zrobić klasę statyczną i wtedy np wywołać Obliczenia::getObliczenia(). Możesz też zrobić metodę "void setObliczenia(const Obliczenia &obliczenia)", w klasie bazowej po twoich klasach Plot i PlotSpek i dam dodawać utworzony gdzieś na zewnątrz obiekt Obliczenia.
Zawsze można zrobić singletona, lepsze to niz "klasa statyczna". http://en.wikipedia....ngleton_pattern
Użytkownik icek edytował ten post 13 maj 2010, 19:43
Zawsze można zrobić singletona, lepsze to niz "klasa statyczna". http://en.wikipedia....ngleton_pattern
Tylko że singleton to klasa statyczna :)
Tylko że singleton to klasa statyczna :)
To już kwestia implementacji.
@Pravi
Popatrz na to z tej perspektywy, że klasy od rysowania powinny jedynie wiedzieć co i jak narysować, a nie jak to obliczyć wykorzystując klasę Obliczenia. Stąd obliczenia wykonuj poza ploterami, a do nich przekazuj same wyniki.
problem polega na tym, że robię w konstruktorze obu wykresów
+ wypowiedz reVisa
to nie plot powinien liczyc (zadawac zapytanie liczenia innej klasie), powinien tylko dostac dane co narysowac.
eugeniusz: zdefiniuj mi co to klasa statyczna wg Ciebie.
eugeniusz: zdefiniuj mi co to klasa statyczna wg Ciebie.
To wszystko przez wypowiedź autora wątku, bo pisząc "przerobić klasę na statyczną" zrozumiałem to właśnie jako: przerobić klasę na taką, która zwraca swój obiekt statyczny (czyli singleton), choć teraz po krótkim zastanowieniu wpadłem, że mogło mu chodzić o stworzenie obiektu statycznego tej klasy.
Co do pytania - nie wiem. Ale klasa statyczna to może być taka, która ma wszystkie metody i pola statyczne :)
-----------------------------------
Ale żeby nie robić off-topów:
Jakby się zastanowić, to zapewne obiekt klasy Plot nie ma sensu bez obiektu klasy Obliczenia - bo taki plot nic nie narysuje. Może więc dobrym rozwiązaniem by było zrobić konstruktor na przykład:
Plot(const Obliczenia &obliczenia);