Obiekty w klasach
Ostatnio zmodyfikowano 2017-04-17 20:37
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? #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; }
|
|
karambaHZP |
» 2017-04-17 19:51:04 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. |
|
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? |
|
karambaHZP |
» 2017-04-17 20:22:35 Przykład mocno naciągany. #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: #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. |
|
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? |
|
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 |
|
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.
|
|
« 1 » |