Problém z tiredou – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém z tiredou – C / C++ – Fórum – Programujte.comProblém z tiredou – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
me.name0
Návštěvník
23. 7. 2013   #1
-
0
-

Toto je moja trieda "complex" ktorá ma 2 premenné :  'r' a 'i'
r = realna zlozka cisla i = imaginarna

class complex{
    private:
        int r;
        int i;
    public:
        complex(int re = 0, int im = 0);     //KONŠTRUKTOR
        
        complex & operator+(const complex &)const;     
      //PREŤAŽENIE OPERÁTORU +  aby som mohol sčítat 2objekty typu complex
     friend ostream & operator<<(ostream & os, complex & c);
    //PREŤAŽENIE OPERÁTORU << ABY SA DAL POUŽIŤ Z COUT       napr. cout<<(objet typu complex)

};

definície :

complex & operator+(const complex & c)const      
{
    complex temp(r+c.r, i+c.i);    //vytvorím objekt typu complex a priradím mu sčítané hodnoty 
    cout << temp;                      //vypíšem len aby som mal istotu že funguje správne
    system("PAUSE");               
    return temp;                        //returnem objekt 
}

ostream & operator<<(ostream & os, complex & c)
{
    os << "(" << c.r << "," << c.i << "i)"; //zobrazím 
    return os;                                        // returnem objekt triedy ostream aby sa dal cout použiť z viacerimy pr.
}

int main()
{
      complex cislo1(10,20);   //objekt complex r = 10, i = 20
      complex cislo2(20,50);   //objekt complex r = 20, i = 50
      cout << cislo1 << endl << cislo2  << endl;    // zobrazí sa (10,20i)
                                                                                               (20,50i)  čo je správne.

      cout << cislo1+cislo2;
     //teraz ide operátor+ takže sa vytvorý novy objekt zobrazí sucet :"(30,70i)" a return-e
     // takže sa to zmeni na : cout << return-nený objekt
   //operator<<  zobrazí hodnoty ale nie  správnu hodnotu "(30,70i)" ale :"(10,75)"

  rád by som vedel  prečo?  ...ani na googli som nič nenašiel.

Nahlásit jako SPAM
IP: 213.151.236.–
KIIV
~ Moderátor
+43
God of flame
23. 7. 2013   #2
-
0
-

problem je v te referenci na neco cos vytvoril uvnitr operator+ ... po skonceni toho pretizeneho operatoru vyskakujes z kontextu a tim padem nemas co referencovat...

complex.cpp: In member function ‘complex& complex::operator+(const complex&) const’:
complex.cpp:20:13: warning: reference to local variable ‘temp’ returned [enabled by default]

 neco takoveho uz funguje:

#include <iostream>

using namespace std;

class complex{
    private:
        int r;
        int i;
    public:
        complex(int re = 0, int im = 0): r(re), i(im) {;}     //KONŠTRUKTOR
        
        complex operator+(const complex &)const;     
        //PREŤAŽENIE OPERÁTORU +  aby som mohol sčítat 2objekty typu complex
        friend ostream & operator<<(ostream & os, const complex c);
        //PREŤAŽENIE OPERÁTORU << ABY SA DAL POUŽIŤ Z COUT       napr. cout<<(objet typu complex)
};

complex complex::operator+(const complex & c)const      
{
    complex temp(r+c.r, i+c.i);    //vytvorím objekt typu complex a priradím mu sčítané hodnoty 
    //cout << temp;                      //vypíšem len aby som mal istotu že funguje správne
    return temp;                        //returnem objekt 
}

ostream & operator<<(ostream & os, const complex c)
{
    os << "(" << c.r << "," << c.i << "i)"; //zobrazím 
    return os;                                        // returnem objekt triedy ostream aby sa dal cout použiť z viacerimy pr.
}

int main()
{
    complex cislo1(10,20);   //objekt complex r = 10, i = 20
    complex cislo2(20,50);   //objekt complex r = 20, i = 50
    cout << cislo1 << endl << cislo2  << endl;    // zobrazí sa (10,20i)   (20,50i)  čo je správne.

    cout << cislo1+cislo2;
    //teraz ide operátor+ takže sa vytvorý novy objekt zobrazí sucet :"(30,70i)" a return-e
    // takže sa to zmeni na : cout << return-nený objekt
    //operator<<  zobrazí hodnoty ale nie  správnu hodnotu "(30,70i)" ale :"(10,75)"
    return 0;
}

Ale zase se tam hodnekrat "kopiruje" ... s tim returnem by mel pomoct move konstruktor z nove specifikace C++11 (ikdyz "pomoci" jen ze by to mohlo pak fungovat.. ty kopirovani by se tam delaly stejne)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
me.name0
Návštěvník
23. 7. 2013   #3
-
0
-

#2 KIIV
OK chápem díky..

Nahlásit jako SPAM
IP: 213.151.236.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 31 hostů

Podobná vlákna

Problém v C — založil Robin

Problem — založil Ghosta

Problém — založil pali6

Problem — založil roonill

Problem s LIKE — založil Lordest

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý