Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Jak zgrabnie przenosić między obiektami różnoklasowymi

Ostatnio zmodyfikowano 2011-01-16 19:02
Autor Wiadomość
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:

C/C++
#include <iostream>
#include <ctime>
#include <conio.h>

using namespace std;

class czasSekundy
// Klasa produkować ilość sekund, który upłynęły od początku pomiaru czasu do jego końca
{
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; //Znaczy konca - startu
   
    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;
   
    // Stałe symbolizujące liczbę sekund w określonych okresach czasu
    #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?
P-26509
DejaVu
» 2011-01-14 14:51:26
Jedna z możliwości:
C/C++
class CDane
{
};

class CUzywajka
{
public:
    void wczytaj( const CDane & dane );
};

int main()
{
    CDane jakiesDane;
    CUzywajka u;
   
    u.wczytaj( jakiesDane );
   
    return 0;
}
P-26512
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.
P-26516
DejaVu
» 2011-01-14 16:48:16
C/C++
dane.metoda();
dane.m_zmienna();
P-26523
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?
P-26526
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
P-26529
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:

C/C++
#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
P-26530
DejaVu
» 2011-01-14 18:36:57
Zamiast:
C/C++
cout << Cdane & dane;
Napisz:
C/C++
cout << dane.nazwa_zmiennej_nalezacej_do_klasy_CDane;
czyli w Twoim wypadku:
C/C++
cout << dane.dane;
P-26531
« 1 » 2 3
  Strona 1 z 3 Następna strona