Jak zgrabnie przenosić między obiektami różnoklasowymi
Ostatnio zmodyfikowano 2011-01-16 19:02
jsc Temat założony przez niniejszego użytkownika |
Jak zgrabnie przenosić między obiektami różnoklasowymi » 2011-01-14 14:27:15 Mam kod z dwiema klasami: #include <iostream> #include <ctime> #include <conio.h>
using namespace std;
class czasSekundy
{ private: unsigned long int typedef moment; moment startu; moment konca; void wezStartu() { startu = time( NULL ); } void wezKonca() { konca = time( NULL ); } void obliczTrwania() { trwania = konca - startu; } public: moment trwania; void zacznij() { trwania = 0; } void dajTrwania() { wezStartu(); getch(); wezKonca(); obliczTrwania(); cout << trwania << "\n"; } };
class czasDlugi { private: unsigned char typedef okres; okres sekendy; okres minuty; okres godziny; #define sekunda 1 #define minuta (60 * sekunda) #define godzina (60 * minuta) #if 0 void obliczIleGodzin( moment iloscSekund ) { godziny = iloscSekund / godzina; iloscSekund -= godziny * godzina; } void obliczIleMinut( moment iloscSekund ) { minuty = iloscSekund / minuta; iloscSekund -= minuty * minuta; } void obliczIleSekund( moment iloscSekund ) { sekundy = iloscSekund; } #endif public: #if 0 void obliczIleOkresow() { obliczIleGodzin( iloscSekund ); obliczIleMinut( iloscSekund ); obliczIleSekund( iloscSekund ); } #endif };
int main() { czasSekundy warta; okresik.zacznij(); okresik.dajTrwania(); czasDlugi okres; #if 0 okres.obliczIleOkresow(); #endif return 0; }
Jak widać jedna klasa wykorzystuje dane drugiej. Moje pytanie brzmi jak zgrabnie zorganizować przenoszenie tych danych (takimi jak moment trwania) między obiektami czasSekundy warta i czasDlugi okres? |
|
DejaVu |
» 2011-01-14 14:51:26 Jedna z możliwości:
class CDane { };
class CUzywajka { public: void wczytaj( const CDane & dane ); };
int main() { CDane jakiesDane; CUzywajka u; u.wczytaj( jakiesDane ); return 0; }
|
|
jsc Temat założony przez niniejszego użytkownika |
» 2011-01-14 15:23:03 Jeżeli dobrze zrozumiałem to: Moje czasSekundy to twoje Cdane i moje trwania to twoje dane. Jeśli tak to konstrukcję z & powinienem czytać tak: klasa & jej pole. |
|
DejaVu |
» 2011-01-14 16:48:16 dane.metoda(); dane.m_zmienna();
|
|
jsc Temat założony przez niniejszego użytkownika |
» 2011-01-14 17:13:49 Oj... Na takim poziomie hermetyzacji ja się gubię.
Możesz napisać ten kod tak, że w jednej klasie dane są zapisane cinem, a drugiej jest wyświetlany coutem? |
|
DejaVu |
» 2011-01-14 18:14:47 Napisz sam tak jak Ci się wydaje, a później będziemy mogli dyskutować o ewentualnych błędach. Jak przeanalizujesz to co dostałeś to powinieneś sam dojść do rozwiązania. Wolę dawać wędkę, a nie rybę stąd moja polityka ;p |
|
jsc Temat założony przez niniejszego użytkownika |
» 2011-01-14 18:34:58 Wychodząc od wniosków z mojego drugiego postu w temacie: Jeżeli dobrze zrozumiałem to: Moje czasSekundy to twoje Cdane i moje trwania to twoje dane. Jeśli tak to konstrukcję z & powinienem czytać tak: klasa & jej pole.
|
napisałem coś takiego: #include <iostream> #include <conio.h>
using namespace std;
class CDane { public: char dane; void wezDane() { cin >> dane; } };
class CUzywajka { public: void wczytaj( const CDane & dane ) { cout << Cdane & dane; } };
int main() { CDane jakiesDane; jakiesDane.wezDane(); CUzywajka u; u.wczytaj( jakiesDane ); return 0; }
, ale przy kompilacji wyskakuje: In member function `void CUzywajka::wczytaj(const CDane&)' error: `Cdane' was not declared in this scope w linijce nr. 23 === Build finished: 1 errors, 0 warnings ===
Nie wiem o co chodzi z tym inicjowaniem CDane |
|
DejaVu |
» 2011-01-14 18:36:57 Zamiast:
Napisz:
cout << dane.nazwa_zmiennej_nalezacej_do_klasy_CDane;
czyli w Twoim wypadku:
|
|
« 1 » 2 3 |