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

std::ostream, klasy abstrakcyjne

Ostatnio zmodyfikowano 2017-04-09 16:57
Autor Wiadomość
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
C/C++
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
C/C++
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; //tu problem, to tak nie działa..
    }
};

Proszę o jakiś przykład jak posługiwać się
 ostream
P-159978
Luq
» 2017-04-08 13:24:18
stream << "[#" << id << "]" << name;
P-159979
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ć
P-160002
carlosmay
» 2017-04-08 22:51:44
C/C++
{
    User user;
    user.print( cout );
}
P-160003
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
P-160004
carlosmay
» 2017-04-08 23:53:03
P-160007
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

C/C++
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
C/C++
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
C/C++
int access;
czy da się to zrobić bez tego
Edit
Na razie mam takie kwiatki
C/C++
#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; // chodzi mi o to pole
   
public:
    User( int _id, string _name, int _accessik = 0 )
        : id( _id )
         , name( _name )
         , accessik( _accessik )
    { } /* i tutaj chcialbym uniknac dawania trzeceigo argumentu*/
   
    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;
}
P-160019
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.
P-160020
« 1 » 2
  Strona 1 z 2 Następna strona