Matematické Fórum


1. 8. 2026 (L) Fórum bude brzy uzavřeno 😿

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

#1 27. 01. 2025 19:02

fmfiain
Příspěvky: 744
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: 5367
Reputace:   130 
 

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: 744
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: 744
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: 5578
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: 744
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: 5367
Reputace:   130 
 

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: 744
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