» »

C++ razred imaginarno število

C++ razred imaginarno število

golobich ::

Pozdravljeni!

Dobil sem naslednjo nalogo:
Imamo razred imaginarno_stevilo in v njem deklarirani dve privatni spremenljivki za realni in imaginarni del imaginarnega števila. Napiši privzeti konstruktor, ki nastavi vrednosti obeh spremenljivk na 1 ter destruktor. Razred vsebuje tudi javno metodo void nastavi(), ki nastavi imaginarno število na poljubno vnesene celoštevilske vrednosti. Napiši tudi metodo, ki sešteje dve imaginarni števili! Prikaži na primeru.

Meni je uspelo kar en velik del tega programa napisat, vendar mi rezultat narobe izpiše. Če vpiše realni in imaginarni del prvega števila 2 in realni in imaginarni del drugega števila 3, mi namesto 5 vrže ven 4.
Ni mi pa jasno zakaj.
To je pa koda
#include<iostream>
using namespace std;
class imaginarnoStevilo
{
 private:
         int realno;
         int imaginarno;
         
 public:
         void imaginarnoStevilo::set_values(int realno, int imaginarno)
         {
         this->realno = realno;
         this->imaginarno = imaginarno;
         }
         
         void izpis()
         {
              cout<<"Realni del: "<<realno<<endl;
              cout<<"Imaginarni del: "<<imaginarno<<endl;
         }  
         
         imaginarnoStevilo operator+(imaginarnoStevilo);
};

imaginarnoStevilo imaginarnoStevilo::operator+(imaginarnoStevilo)
{
                  imaginarnoStevilo vaja;
                  vaja.realno=this->realno + realno;
                  vaja.imaginarno = this->imaginarno + imaginarno;
                  vaja.izpis();
                                               
}

int napolniRealni ()
{
    int a;
    cout<<"Vnesi realni del: "<<endl;
    cin>>a;
    return a;
}

int napolniImaginarni()
{
    int a;
    cout<<"Vnesi imaginarni del: ";
    cin>>a;
    return a;
}

int main()
{
    int a = napolniRealni();
    int b = napolniImaginarni();
    int c = napolniRealni();
    int d = napolniImaginarni();
    imaginarnoStevilo stevilo1, stevilo2;
    stevilo1.set_values(a,b);
    stevilo2.set_values(c,d);
    stevilo1+stevilo2;
   // stevilo1.izpis();
    cout<<endl;
    system ("pause");
    return 0;

}

dice7 ::

Tvoja napaka je pri 'operator+'. Ti deklariraš nov objekt 'vaja' za skorajda brezveze in vrednost imaginarnega in realnega tistega objekta (ki je lahko karkoli vsaj ti jih ničesar ne postavlja na 0) prišteješ vrednosti iz objekta 'stevilo2'

Če si prvotno želel, da ti sešteje vrednosti objektov 'stevilo1' in 'stevilo2' in se spremembe shranijo v 'stevilo1', potem bo nekaj takšnega delovalo

void imaginarnoStevilo::operator+(imaginarnoStevilo vaja) //objekt 'vaja' ima lastnosti objekta 'stevilo2'
{ // 'this' se pa v tem primeru nanaša na objekt 'stevilo1'
                  this->realno = this->realno + vaja.realno;
                  this->imaginarno = this->imaginarno + vaja.imaginarno;
                  //vaja.izpis();
}

Zgodovina sprememb…

  • spremenil: dice7 ()

golobich ::

Hvala dice7! :D
Sedaj so mi te operatorji tudi malo bolj jasni!

Hvala! ;)

xordie ::

Manjkata se ti privzeti konstruktor in destruktor. Uporaba this je odvec.

Se ti zdi smiselno, da se stevilo1 spremeni ko mu pristejes stevilo2.

Verjetno bi bilo boljse:

stevilo3=stevilo1+stevilo2;
stevilo3.izpis();


V tem primeru ohranis prvotne vrednosti stevil.
x


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

kompleksna števila

Oddelek: Šola
131614 (1292) FrRoSt
»

Implementacija kompleksnih števil za FT

Oddelek: Programiranje
91219 (791) Randomness
»

Risanje "čudnih" grafov

Oddelek: Šola
111565 (1399) blaz_
»

C++ programa

Oddelek: Programiranje
7961 (747) DubleG
»

-1 = 1 ????

Oddelek: Šola
141669 (1368) McHusch

Več podobnih tem