global friend vs static member

Sekcia: Programovanie 14.01.2011 | 03:13
Avatar Grawp   Používateľ
Existuje v cpp nejaký rozdiel medzi globálnou friend funkciou a statickou funkciou okrem iného zápisu volania?
    • Re: global friend vs static member 15.01.2011 | 12:49
      Avatar borg Fedora  Administrátor
      staticka metoda moze pristupovat len ku statickym membrom triedy (nemozes ju volat pre instanciu), kdezto friend funkcia ma pristup aj k membrom instancie (aj privatnym)
      • Re: global friend vs static member 15.01.2011 | 13:55
        Avatar Grawp   Používateľ
        Pýtal som sa na globálnu friend funkciu tá určite nemože pristupovať k member veciam.
        • Re: global friend vs static member 15.01.2011 | 15:34
          Avatar borg Fedora  Administrátor
          no ked vravis... (ale urcite si si to vyskusal, nez si trepol taku hovadinu [nemozes deklarovat friend funkciu mimo triedy]) ;)
          globalna friend funkcia nema vyznam.
          • Re: global friend vs static member 15.01.2011 | 16:02
            Avatar Grawp   Používateľ
            Nie, nie, asi si to nepochopil. Mám deklarovanú globálnu funkciu a tá je následne v nejakej triede označená ako friend.
            Ide tu len o teoretickú otázku, či je medzi globálnou fnc. označenou ako friend a statickou member funkciou roziel.

            Príklad: class X {
            private:
            friend void lala(X& q);
            public:
            static void lala2(X& q);
            private:
            int ii;
            };

            void lala(X& q) {
            q.ii = 69;
            cout << "lala" << endl;
            }

            void X::lala2(X& q) {
            q.ii = 69;
            cout << "lala2" << endl;
            }

            int main {
            X x;
            ...}

            Obe robia to isté, len jednu treba volať ako lala(x), druhú ako x.lala(x), alebo X::lala(x). A pýtam si, či existuje nejaký iný rozdiel ako zápis volania.
            • Re: global friend vs static member 15.01.2011 | 16:13
              Avatar borg Fedora  Administrátor
              s takouto signaturou nie je ziadny rozdiel (okrem sposobu volania). myslel, som ze myslis nieco ine. (ale mozno kompilator moze robit nejake optimalizacie, ale to zavisi od kompilatora).
            • Re: global friend vs static member 16.01.2011 | 14:01
              darth vader   Návštevník
              Programatorsky rozdiel je tam minimalny.
              Jediny snad viditelny rozdiel je ked chces robit nieco stylu:
              X operator+(double a, const X &b)
              (tuna potrebujes externu funkciu kvoli poradiu argumentov (ano C++ je v tomto trochu sproste)
              tak toto ide iba globalnou funkciou.

              • Re: global friend vs static member 17.01.2011 | 17:30
                Avatar Grawp   Používateľ
                Takže je to tak ako som si myslel.
                Btw. s tymi operatormi je to normálne. Proste to kompilátor parsuje v istom smere a v žiadnom prípade to nie je nevýhod. Práve naopak, je to výhoda.