• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Przeciążenie operatora >>

Object Storage Arubacloud
0 głosów
909 wizyt
pytanie zadane 26 lipca 2017 w C i C++ przez WireNess Stary wyjadacz (11,240 p.)
zamknięte 26 lipca 2017 przez WireNess

Cześć

Od kilku godzin głowie się nad stworzeniem przeciążenia operatora >>.

Mam klasę o nazwie, załóżmy klasa, który ma dwie składowe: x,y.

W funkcji main tworzę obiekt klasy o nazwie - object. I teraz chciałbym za pomocą instrukcji cin>>object; wczytać składowe x,y

I za nic nie mogę wymyślić jak to zrobić ;D 

Wycinki potrzebnego kodu:

mojaKlasa.hpp

class Klasa
{
private:
    double x;
    double y;

public:
    Klasa();
    ~Klasa();
};

mojaKlasa.cpp

Klasa::Klasa()
{
    x=y=0;
}
Klasa::~Klasa()
{
}

main.cpp

Klasa object;

cout << "Podaj liczbe zespolona: " << endl;
cin >> object;

Wiem, że to ^^^^^^^^^^^^^^^^^ i tak nic nie pomoże, ale chcę uniknąć krytyki ludzi typu: ,,może byś podał kod?",,tu są programiści nie jasnowidzowie" etc.

Nie ma potrzeby dawania całego kodu, bo i tak nic by to nie dało :D.

Wracając do pytania:

Próbowałem coś takiego:

//mojaKlasa.hpp

void operator>>(const istream & is, const Klasa & kl) const;
//mojaKlasa.cpp

void operator>>(const istream & is, const Klasa & kl) const
{
    cout << "x: ";
    cin >> kl.x;
    cout << "y: ";
    cin >> kl.y;
}

Ale nie wypaliło ;D

 

Jeżeli brakowałoby jakiejkolwiek informacji potrzebnej do rozwiązania problemu, nie krytykuj - napisz - uzupełnie!

komentarz zamknięcia: Rozwiązany!

1 odpowiedź

+3 głosów
odpowiedź 26 lipca 2017 przez Bondrusiek Maniak (61,370 p.)
wybrane 26 lipca 2017 przez WireNess
 
Najlepsza

Witam,

spróbuj tak w pliku .hpp

friend istream& operator>>(istream & is, Klasa & kl) 
{
is >> kl.x >> kl.y;
return is; 
}

  1. 1)Dodajemy modyfikator firend aby obiekt mógł być po lewej stronie wyrażenia bądź by funkcja mogła odwołać się do pól prywatnych.
  2. 2)Operator >> przeważnie powinien coś zwrócić. Domyślnie jest to istream& i wtedy możliwy jest taki zapis cin >> klasa.
  3. 3)Usuń z sygnatury funkcji słowo const. Modyfikator const zabrania zmieniać wartości a Ty w tej funkcji podajesz nową zawartość dla is oraz pol klasy kl.

Pozdrawiam

komentarz 26 lipca 2017 przez WireNess Stary wyjadacz (11,240 p.)

​​​​​​Dzięki wielkie!

I jeszcze większe dzięki za wytłumaczenie! :D

Pozdrawiam!

​​​​

​​​​​

komentarz 26 lipca 2017 przez PoetaKodu Stary wyjadacz (10,990 p.)

Bondrusiek, jak żyję, nigdy nie widziałem, żeby w C++ można było używać słowa kluczowego "friend" poza klasą, poza tym narusza to bezpieczeństwo klas. Powiesz mi skąd o tym się dowiedziałeś i/lub dasz jakiś kod, który to wykorzystuje i działa?

komentarz 26 lipca 2017 przez Bondrusiek Maniak (61,370 p.)

@PoetaKodu Napisałem aby ten kody wykorzystał w pliku.h(domyślnie w definicji klasy)
 

class Klasa

{

...

friend void jakasKlasa() {//jakiś kod}

};

Słowo friend używasz tylko w definicji klasy. Mówi to kompilatorowi, że ta funkcja może się odwoływać do zmiennych prywatnych. Modyfikator friend z mojego doświadczenia wiem że najczęściej jest wykorzystywany przy przeciążeniu operatorów klasy.

komentarz 26 lipca 2017 przez WireNess Stary wyjadacz (11,240 p.)

Napisał, żeby użyć w pliku .hpp!

Czytaj dokładniej?!

komentarz 26 lipca 2017 przez PoetaKodu Stary wyjadacz (10,990 p.)
Edit: nevermind, mój błąd.

Podobne pytania

+1 głos
2 odpowiedzi 337 wizyt
pytanie zadane 14 czerwca 2021 w C# przez everstudybee Użytkownik (610 p.)
0 głosów
2 odpowiedzi 985 wizyt
pytanie zadane 6 stycznia 2017 w C i C++ przez Ala123456 Użytkownik (760 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...