Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 27. 01. 2025 19:02

fmfiain
Příspěvky: 734
Reputace:   -1 
 

Vstupná hodnota do funkcie

Dobrý deň,
v jazyku c++ som narazil na takéto vstupné hodnoty do funkcie:

Code:

S& operator=(const S &)

a

Code:

S& operator=(const S &&)

Rád by som vedel, čo tieto vstupy (v guľatých zátvorkách) znamenajú.

Ďakujem za odpoveď.

Offline

 

#2 28. 01. 2025 10:52

MichalAld
Moderátor
Příspěvky: 5178
Reputace:   127 
 

Re: Vstupná hodnota do funkcie

A jinak problematice přetěžování operátorů rozumíš, nebo je to pro tebe nové?

Co znamená to druhé taky nevím, ale k tomu prvnímu můžeš kouknout tady.

Offline

 

#3 28. 01. 2025 11:48 — Editoval fmfiain (28. 01. 2025 12:07)

fmfiain
Příspěvky: 734
Reputace:   -1 
 

Re: Vstupná hodnota do funkcie

Dobrý deň ↑ MichalAld:,
preťažovanie operátorov poznám, ale tie vstupy nie.

Podľa tej tvojej stránky sa vo vnútri triedy definuje funkcia bez premenných, tak ako to mám v príklade ja a mimo triedy sa definuje ešte raz, ale tento krát s premennou.
Funguje mi to zatiaľ iba na operator=. Ešte sa pokúsim, čo to urobí s inými funkciami.

Ďakujem.

Offline

 

#4 28. 01. 2025 13:02 — Editoval fmfiain (28. 01. 2025 13:05)

fmfiain
Příspěvky: 734
Reputace:   -1 
 

Re: Vstupná hodnota do funkcie

Dobrý deň ↑ MichalAld:,
operator= som už vyriešil v #3. Zistil som, že pre inkrement a dekrement (operator++ a operator--) má typ v guľatých zátvorkách iný význam.

Code:

#include <iostream>

struct X
{
    int value1;
    X(int i) { (*this).value1 = i; }
    // prefix increment
    X& operator++()
    {
        // actual increment takes place here
        (*this).value1 = (*this).value1 + 1;
        return *this; // return new value by reference
    }

    // postfix increment
    X operator++(int)
    {
        X old = *this; // copy old value
        operator++();  // prefix increment
        return old;    // return old value
    }

    // prefix decrement
    X& operator--()
    {
        // actual decrement takes place here
        (* this).value1 = (*this).value1 - 1;
        return *this; // return new value by reference
    }

    // postfix decrement
    X operator--(int)
    {
        X old = *this; // copy old value
        operator--();  // prefix decrement
        return old;    // return old value
    }
    
};





int main()
{
    X x1(0), x2(0);

    std::cout << (++x1).value1 << std::endl;
    std::cout << (x2++).value1 << std::endl;
}

Vráti mi:
1
0
Ale prečo je tam X& operator++() práve pre prefixový inkrement a X operator++(int) práve pre postfixový inkrement to neviem. Skúšal som tam dať namiesto int float, std::string ale s tým mi to nefungovalo.

Offline

 

#5 28. 01. 2025 16:12

check_drummer
Příspěvky: 5171
Reputace:   106 
 

Re: Vstupná hodnota do funkcie

Čím víc složitostí daný jazyk obsahuje, tím víc bych se mu vyhýbal.


"Máte úhel beta." "No to nemám."

Offline

 

#6 28. 01. 2025 17:29

fmfiain
Příspěvky: 734
Reputace:   -1 
 

Re: Vstupná hodnota do funkcie

Dobrý deň ↑ check_drummer:,
programátori sa delia podľa toho, ktorý jazyk uprednostňujú. Mne prischol jazyk c++. Prvý krát som sa s ním stretol v druháckom predmete na bc. štúdiu a odvtedy v ňom programujem vždy, keď môžem. Samozrejme nepohrdnem ani iným jazykom, ak nie je na výber. Napríklad neurónové siete som sa učil pomocou pythonu.

Offline

 

#7 28. 01. 2025 18:00

MichalAld
Moderátor
Příspěvky: 5178
Reputace:   127 
 

Re: Vstupná hodnota do funkcie

No zrovna přetěžování operátorů je taková věc, jejíž zápis moc smysl nedává. Překladač musí nějak poznat, jestli máš na mysli prefixový nebo posfixový increment/decrement, ale proč tam je zrovna to "int", to nevím.

Tak nad tím nepřemýšlej, jestli ti to funguje, tak si zapamatuj, že se to tak dělá a máš to.

Operátory v C++ se dají rozdělit do takových skupin, většina z nich se přetěžuje celkem pochopitelným způsobem, ale některé jsou takové zvláštní.

Offline

 

#8 29. 01. 2025 15:42

fmfiain
Příspěvky: 734
Reputace:   -1 
 

Re: Vstupná hodnota do funkcie

Dobrý deň,
zistil som, že tie typy bez premenných fungujú aj v obyčajných funkciách. Moje funkcie síce nič nevracajú ale idú skompilovať:

Code:

#include <iostream>

void func(int)
{
    
};

void func(std::string)
{

};



int main()
{
    func(1.2);
    func(1);
    func("String");
    return 0;
}

Sumár:
Ak dám do funkcie celé alebo desatinné číslo, zavolá sa mi telo funkcie func(int). Ak dám do funkcie string, zavolá sa mi telo funkcie func(std::string).

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson