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

Obiekty w klasach

Ostatnio zmodyfikowano 2017-04-17 20:37
Autor Wiadomość
Invalidor
Temat założony przez niniejszego użytkownika
Obiekty w klasach
» 2017-04-17 19:13:04
Witam, napisałem sobie mały program testowy na bazie klas. Ma on pobrać dane z klawiatury zapisać a potem wyświetlić je. Z tym że dane nie chcą się zapisać. Wiem że problemem są rożne nazwy obiektów. Ale nie wiem jak, gdzie powinienem zamieścić: Tekst obiekt; aby był on wspólny dla int main() i class Edytor. Podsumowując jak naprawić ten program by tablica się wyświetlała po uruchomieniu go a nie resetowała?

C/C++
#include <iostream>
using namespace std;
class Tekst
{
public:
    char array[ 1024 ];
   
    Tekst()
    {
    }
   
    void funkcja()
    {
        cout << "Podaj slowo lub zdanie: " << endl;
        cin >> array;
        cout <<( "Slowo: " ) << array << endl;
    }
    void wyswietl()
    {
        cout << "Wyswietlam: " << array << endl;
    }
};
class Edytor
{
public:
    Edytor()
    {
    }
   
   
    void uruchom()
    {
        Tekst obiekt;
        obiekt.funkcja();
    }
};
int main()
{
    Edytor pobierz;
    pobierz.uruchom();
    Tekst obiekt;
    obiekt.wyswietl();
   
    return 0;
}
P-160220
karambaHZP
» 2017-04-17 19:51:04
C/C++
void uruchom()
{
    Tekst obiekt;
    obiekt.funkcja();
}
To co tutaj robisz jest lokalnie (niszczone przy opuszczaniu metody).
Dodaj w klasie
Edytor
 pole przedstawiające pole klasy
Tekst
i operuj na tym polu.
P-160223
Invalidor
Temat założony przez niniejszego użytkownika
» 2017-04-17 20:07:59
Szczerze to nie do końca rozumiem. Musze stworzyć globalny obiekt? Ale jak?
P-160226
karambaHZP
» 2017-04-17 20:22:35
Przykład mocno naciągany.
C/C++
#include <string>
#include <iostream>

class TextView {
    std::string text;
public:
    void Set( const std::string & text ) { this->text = text; }
    void Print() const { std::cout << this->text << '\n'; }
};

class TextEditor {
    TextView anyText;
public:
    void Set( const std::string & text ) { this->anyText.Set( text ); }
    void Print() const { this->anyText.Print(); }
    void ChangeText( const std::string & newText ) { this->anyText.Set( newText ); }
};

int main()
{
    TextEditor te;
    te.Set( "pierwotny" );
    te.Print();
    te.ChangeText( "wtorny" );
    te.Print();
}

Poczytaj jakiś kurs OOP, aby poznać różnicę między klasą i obiektem klasy.
W tym przypadku najwygodniej byłoby skorzystać z dziedziczenia, jeśli nazwy metod mają się pokrywać.

edit:
C/C++
#include <string>
#include <iostream>

class TextView {
    std::string text;
public:
    void Set( const std::string & text ) { this->text = text; }
    void Print() const { std::cout << this->text << '\n'; }
};

class TextEditor {
    TextView anyText;
public:
    void Set( const std::string & text ) { this->anyText.Set( text ); }
    void ChangeTextViewObj( TextView & tv, const std::string & newText ) { tv.Set( newText ); }
};

int main()
{
    TextView tv;
    tv.Set( "textView" );
    tv.Print();
    TextEditor te;
    te.ChangeTextViewObj( tv, "nowy textView" );
    tv.Print();
}
Jeszcze takie coś. Trochę więcej w tym ładu.
P-160228
Invalidor
Temat założony przez niniejszego użytkownika
» 2017-04-17 20:22:58
Czy da sie zrobić obiekt odnoszący się do dwóch klas?
P-160229
mateczek
» 2017-04-17 20:27:41
"przykład mocno naciągany" :P  Bo i autor wątku widać jeszcze nie rozumie idei programowania obiektowego. I ma nieprzemyślany układ klas i relacje między klasami.


Czy da sie zrobić obiekt odnoszący się do dwóch klas?

kalsa = przepis na zupę
obiekt = zupa

P-160230
mateczek
» 2017-04-17 20:37:57
ogólnie w programowaniu obiektowym można najpierw na kartce narysować sobie jak poszczególne klasy będą wyglądały i jakie będą miały między sobą relacje. I tak sobie myślę że takie zdania jak poniżej to wstęp do napisania programu obiektowego.

np.
1. obiekt edytor będzie zawierał tablicę obiektów tekst.
2. obiekt edytor będzie zawierał funkcję pozwalającą dodać nowy obiekt tekst do tablicy
3. obiekt tekst potrafi wyświetlić siebie na ekranie.
itp itd.

I jeśli taki rysunek nie będzie zbyt chaotyczny (obiekt tekst nie będzie chciał rządzić edytorem :P ) to można zacząć wcielać program w życie. Oczywiście z tym co tu napisałem nie trzeba się zgadzać a jedynie potraktuj to jako sugestię do rozpatrzenia.

 
P-160231
« 1 »
  Strona 1 z 1