Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

[C++] Przeciążenie operatora strumienia z wywołaniem funkcji



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> C i C++
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
dzejkob213



Dołączył: 28 Mar 2017
Posty: 1
Skąd: Łódź

PostWysłany: Wto Lis 07, 2017 10:31 pm  OP    Temat postu: [C++] Przeciążenie operatora strumienia z wywołaniem funkcji Odpowiedz z cytatem Pisownia

Witam,
Napotkałem przeszkodę w robieniu zadania na studia. Mianowicie, mam program, w którym jest taka oto funkcja:
Kod:

void morse::mors(char x)
{
    switch (x)
    {
    case 'a':
    case 'A':
        cout << ".-";
        Beep(Frequency, DotTime);
        Beep(0,Pause);
        Beep(Frequency, DashTime);
        Beep(0,CharPause);
(i tak dalej, każdy znak po kolei)



Co funkcja robi - widać.
Natomiast, w mainie, mam narzuconą taką oto linijkę:
Kod:

m << "Ala ma kota";


m, jest to klasa
Kod:
morse m;
,
której konstruktor wygląda tak:
Kod:
morse::morse()
{
    Frequency = 0;
    Pause = 0;
    SpacePause = 0;
    CharPause = 0;
    DotTime = 0;
    DashTime = 0;
}


Sęk tkwi w tym, że nie wiem jak przeciążyć
Kod:
<<
w odniesieniu do mojej funkcji
Kod:
mors

Chodzi o to, że używając operatora
Kod:
<<
muszę wywołać w pętli (od 0 do końca ciągu znaków) swoją funkcję
Kod:
mors
z każdym poszczególnym znakiem (np. A,L,A, , M,A, , K,O,T,A)
wg cpp0x operator
Kod:
<<

przeciąża się w ten sposób:
Kod:
_zwracany_typ_ & operator <<( const _typ_ & );

No i tutaj zaczynają się schody - tak się zapętliłem, że już nie wiem co mam zrobić - w końcu, operator
Kod:
<<
nie będzie zwracać nic, tylko wywoływać funkcję
Kod:
mors


Druga sprawa: Oprócz wywoływania funkcji
Kod:
mors
, operator ten musi także działać w takim przypadku:
Kod:
m << m.pause;

gdzie pause wygląda tak:
Kod:
void morse::Pause()
{
    Beep(0, 800);
}


Jak jednocześnie za pomocą operatora
Kod:
<<
wywołać dwie funkcje, przy czym
Kod:
mors
wywoływać się będzie domyślnie po użyciu
Kod:
<<
?

Od razu mówię - nie czekam na gotowca - czekam na jakieś rady, żebym sam to zrozumiał.
Pozdrawiam :)
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
hicks
Site Admin


Dołączył: 25 Maj 2005
Posty: 1252
Skąd: DO-Wrocław

PostWysłany: Sob Lis 11, 2017 4:06 pm      Temat postu: Odpowiedz z cytatem Pisownia

Co do tego co zwracać w operator<< pomyśl o tym tak: jak napisałbyś metodę w klasie którą możnaby wywołać tak (chaining):
Kod:

SomeObject obj;
obj.f("aa").f("bb").f("cc");


w taki sposób, aby zadziałało tak jak:
Kod:

SomeObject obj;
obj.f("aa");
obj.f("bb");
obj.f("cc");



To samo tak na prawdę musisz zrobić z operator<< i morse::pause.

Co do tego jak uruchomić twoją metodę morse::mors dla każdego znaku to sprowadź to do najprostszego przypadku. Porzućmy na chwilę klasy, obiekty, przeciążenia operatorów itp, bo to tylko zaburza obraz. Mamy tylko prostą funkcję przyjmującą pojedyńczy znak. Nie ważne co z nim robi. Użytkownik chce jednak przekazać ciąg znaków tudzież std::string. Co zrobisz w takim przypadku?

_________________
Moje portfolio Oto ja
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> C i C++ Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.17615 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |