andrzejek97 Temat założony przez niniejszego użytkownika |
std::ostream, klasy abstrakcyjne » 2017-04-08 12:49:16 Witam, miałem za zadanie stworzyć interfejs który ma udostępniać wirtualną metodę print (std::ostream&stream), nie wiem jak posługiwać się czymś takim jak stąd::ostream, ale ok, stworzyłem interfejs class Interfejs { public: virtual void print( ostream & stream ) const = 0; };
Następnie miałem stworzyć klasę User zawierającą pola id i name, przekazywane jako parametry konstruktora, klasa ma dziedziczyć po interfejsie i implementować odziedziczone metody wirtualne, metoda print klasy User powinna wyświetlać komunikat w formacie" [#id]name". I tu jest mój problem, bo nie wiem jak działa ostream, wklejam kod class User : public Interfejs { int id; string name; public: User( int _id, string _name ) : id( _id ) , name( _name ) { } virtual void print( ostream & stream ) const { cout << "[#" << id << "]" << name; } }; Proszę o jakiś przykład jak posługiwać się ostream |
|
Luq |
» 2017-04-08 13:24:18 stream << "[#" << id << "]" << name; |
|
andrzejek97 Temat założony przez niniejszego użytkownika |
» 2017-04-08 22:43:59 A jak później wywołać taką metodę, i czym tak właściwie różni to się od cout'a, jak powinienem to rozumieć |
|
carlosmay |
» 2017-04-08 22:51:44 { User user; user.print( cout ); } |
|
andrzejek97 Temat założony przez niniejszego użytkownika |
» 2017-04-08 23:16:07 Bardzo dziękuję za odpowiedź, a co to właściwie jest ten std::ostream, i dlaczego wysyłam cout |
|
carlosmay |
» 2017-04-08 23:53:03 |
|
andrzejek97 Temat założony przez niniejszego użytkownika |
» 2017-04-09 14:00:28 Dziękuję, w drugiej części zadania mam za zadanie stworzyć kolejny interfejs, ma zawierać metodę ustawiającą uprawnienia obiektu (zakodowane jako liczba całkowita) setAccess(int access), zwracającą ustawienia obiektu getAccess(), oraz sprawdzającą czy obiekt ma wystarczające uprawnienia (czyli większe, bądź równe niż te podane jako argument metody checkAccessible, tyle zrobiłem class Interfejs_Accessible { public: virtual void setAccess( int access ) const = 0; virtual int getAccess() const = 0; virtual bool checkAccessible( int access ) const = 0; };
następnie mam rozszerzyć klasę User tak aby dziedziczyła też z Accessible, czyli class User : public Interfejs_Printable , public Interfejs_Accessible oraz mam w niej zaimplementować wszystkie metody wirtualne, czy to oznacza, że w klasie User muszę stworzyć nowe pole czy da się to zrobić bez tego Edit Na razie mam takie kwiatki #include<iostream> using namespace std; class Interfejs_Printable { public: virtual void print( ostream & stream ) const = 0; }; class Interfejs_Accessible { public: virtual void setAccess( int access ) = 0; virtual int getAccess() const = 0; virtual bool checkAccessible( int access ) const = 0; }; class User : public Interfejs_Printable , public Interfejs_Accessible { int id; string name; int accessik; public: User( int _id, string _name, int _accessik = 0 ) : id( _id ) , name( _name ) , accessik( _accessik ) { } virtual void print( ostream & stream ) const { stream << "[#" << id << "]" << name; } virtual void setAccess( int access ) { accessik = access; } virtual int getAccess() const { return accessik; } virtual bool checkAccessible( int access ) const { if( getAccess() >= access ) return true; else return false; } }; int main() { string nazwa = "Kowalski"; User uzytkownik1( 1253564, nazwa ); int dostep; cout << "Podaj wartosc uprawnien(liczba calkowita): "; cin >> dostep; uzytkownik1.setAccess( dostep ); cout << "Uprawnienia uzytkownika "; uzytkownik1.print( cout ); cout << "=" << uzytkownik1.getAccess(); cout << "\n"; if( uzytkownik1.checkAccessible( 100 ) ) cout << "Uzyskano dostep\n"; else cout << "Brak dostepu"; return 0; }
|
|
andrzejek97 Temat założony przez niniejszego użytkownika |
» 2017-04-09 15:19:12 Moje pytanie jest takie czy jeśli w pierwszej części zadania była napisane, że klasa User ma mieć pola ID oraz name przekazywane przez paramtery konstruktora to czy mogę dodać jeszcze dodatkowe pole access przekazywane jako trzeci parametr konstruktora, czy da się wgl tak zrobić, żeby w konstrukorze ciągle przekazywane były tylko dwa parametery, i żeby były tylko dwa pola w tej klasie. |
|
« 1 » 2 |