Przeladowanie operatora* dla klasy o jednym obiekcie.

0

Npisałem sobie taką klasę i chciałem pracować na niej jak na wskaźniku ale nie rozumiem dlaczego musiałem przeładować** operator* skoro w operator <<<** wyłuskuje wartość.
Wiem tylko, że wtedy kompilator nie wiedziałby jak się zachować przy tej linijce.

cout <<*b1 << endl

metodą prób i błedów jakoś udało mi się przeładować ten operator ale nie rozumiem dlaczego to działa.

 
#include <iostream>

using namespace std;
class Pointer{
    int* wsk;
public:
    Pointer():wsk(new int){}
    Pointer(const Pointer& ob):wsk(new int(*ob.wsk)){}
    Pointer& operator=(const Pointer& ob)
    {
        if(this!=&ob)
        {
            delete wsk;
            wsk = new int(*ob.wsk);

        }
        return *this;
    }
    friend ostream& operator<<(ostream& out,const Pointer& ob)
    {
        return out << *ob.wsk;
    }
    int operator*()
    {
        return *wsk;
    }
};
int main()
{
  Pointer b1;
  cout <<*b1 << endl;
  return 0;
}
0

Nie musiałeś go przeładowywać.

cout << b1 <<endl;

by załatwiło sprawę.

Twój kod zawiera UB, nigdzie nie przypisujesz wartości inta pod wskaźnikiem, a go wypisujesz.

0

Chciałem żeby klasa ta mogła robić to co wskaźnik dlatego chciałem wyrzucić na ekran za pomocą wyłuskania.

Dzięki za odp.

0

To zwracaj referencję do T, inaczej nie będziesz mógł przypisać wartości w ten sposób: *t = 42 - a zwykły wskaźnik na to pozwala.

0

Dzięki wielkie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1