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

klasa pochodna wyświetlanie zawartości klasy bazowej za pomocą operator<<

Ostatnio zmodyfikowano 2014-01-05 21:21
Autor Wiadomość
noob643
Temat założony przez niniejszego użytkownika
klasa pochodna wyświetlanie zawartości klasy bazowej za pomocą operator<<
» 2014-01-05 18:44:52
witam!!

mam taka klase.
C/C++
class base
{
private:
    int * b_x;
    int size;
public:
    virtual void show( void );
   
    base();
    base( int x );
    base( base & x );
    virtual ~base();
   
    base & operator =( base & x );
    friend ostream & operator <<( ostream & os, base & obj );
   
};
class test_base
    : public base
{
private:
    int tb_x;
public:
    virtual void show( void );
   
    test_base();
    test_base( int x );
   
    friend ostream & operator <<( ostream & os, test_base & obj );
};
wyświetlanie zrobiłem sobie metodę show
C/C++
void base::show( void )
{
    for( int i = 0; i < size; i++ )
         cout << b_x[ i ] << " ";
   
    cout << endl;
}
void test_base::show( void )
{
    base::show();
    cout << tb_x << endl;
}
i to działa
ale chciałbym uzyc do tego operator<< żeby to z cout działało.

jak mam "test_base object" to napisze cout << object a nie object.show();

za pomoca operator<< udało mi sie wyświetlić jedynie zwartość jednej klasy
czyli dla base tylko zawartość base, a dla test_base tylko jej nowe składowe.

jak wewnątrz funkcji zaprzyjaźnionej odwołać się do innej funkcji zaprzyjaźnionej która jest powiązana z inna klasą


jedyne co wymyśliłem to zamiast private dac protected
P-101275
pekfos
» 2014-01-05 19:05:46
W czym problem?
P-101283
noob643
Temat założony przez niniejszego użytkownika
» 2014-01-05 19:23:13
jak mam

C/C++
ostream & operator <<( ostream & os, base & obj ) // dla klasy base
{
    for( int i = 0; i < obj.size; i++ )
         os << obj.b_x[ i ] << " ";
   
    os << endl;
    return os;
}

C/C++
ostream & operator <<( ostream & os, test_base & obj ) //dla klasy test base
{
    os << obj.tb_x << endl;
    return os;
}

to jak wywołać operator<< który jest dla klasy base. wewnątrz operator<< który jest dla klasy base_test

jako że funkcje zaprzyjaźnione nie sa składowymi klasy nie wychodzi mi użycie zasięgu base::
P-101288
pekfos
» 2014-01-05 19:59:25
Nie możesz wywołać metody wirtualnej? Wtedy wystarczy jedno przeciążenie operatora.
P-101289
noob643
Temat założony przez niniejszego użytkownika
» 2014-01-05 21:01:01
jak metodę wirtualną?? mam zrobić virtual friend??
P-101296
pekfos
» 2014-01-05 21:03:22
show()..
P-101297
noob643
Temat założony przez niniejszego użytkownika
» 2014-01-05 21:21:41
ok, rozumiem
P-101299
« 1 »
  Strona 1 z 1