Ahoj, hraji si s funkcemi, které slouží k přetěžování operátorů a narazil jsem na jednu věc, kterou nechápu :(
mám třídu Cislo
//soubor Cislo.h, deklarovani hlavicek funkci
class Cislo
{
public:
Cislo();
~Cislo();
//Cislo(Cislo& odkaz);///kontruktor pro kopirovani
Cislo (int);
const int ZiskejHodnotu() const { return hodnota; }
Cislo operator+(Cislo &odkaz);
operator int();
private:
int hodnota;
};
//soubor Cislo.cpp
#include "Cislo.h"
Cislo::Cislo()
{
}
const Cislo Cislo::operator++(int param)
{
//Cislo pom = *this;
Cislo pom(*this);//volam konstruktor pro kopirovani
hodnota++;
return pom;
}
Cislo Cislo::operator+(Cislo & odkaz)
{
int soucet = (int)(hodnota + odkaz.hodnota);
Cislo suma = soucet;
return suma;
}
Cislo::operator int()
{
return hodnota;
}
Cislo::~Cislo()
{
}
//Cislo::Cislo(Cislo & odkaz)
//{
// this->hodnota=odkaz.hodnota ;
//}
#include <iostream>
#include "Cislo.h"
int main()
{
using namespace std;
Cislo cislo=30, cislo2=60;
cout << "prirazeni cislo=30\n";
//Cislo soucet = cislo + cislo2;
Cislo soucet(cislo.operator+(cislo2));
cout << "soucet cisel je:\n"<<soucet.ZiskejHodnotu()<<endl;
}
Program pro součet dvou instancí objektu Cislo funguje, ale nepochopil jsem, že když si napíšu svůj vlastní kopírovací konstruktor, tak program vyžaduje po mě, abych tam přidal ještě funkci operator int();, která slouží k převodu (konverzi) instance objektu na celočíselnou proměnnou, bez ní to s navrženým kopírovacím kosntruktorem nejde a nevím proč jí to potřebuje, proč to tam do ní následně po provedení toho příkazu přiřazení do ní program skáče :(. Že když ten konstruktor pro kopírování vykomentuju a nechám tam ten výchozí, který si program sám vytváří, tak tuto funkci konverze z objektu na integer nepotřebuje (což chápu proč jí nepotřebuje). Prostě nechápu, kde je ten převod z instance objektu na celočíselnou proměnnou.
Doufám, že se mi to podařilo dobře vysvětlit co na tom nechápu :D
Díky moc za rady :)