Itt mi történik miért lesz értelmetlen érték az obj2 tagváltozójába?
// main.cpp
# include <iostream>
class cProba {
public:
cProba(short proba = 0): i_proba(new short(proba)) {std::cout << "cProba konverzios-constructor \n";}
cProba(const cProba *const rhs): i_proba(new short(rhs->i_getProba())) {std::cout << "cProba copy constructor \n";}
~cProba() {delete i_proba; std::cout << "cProba destructor \n";}
const cProba *const operator=(const cProba *const);
short i_getProba()const {return *this->i_proba;}
operator short()const;
private:
short *i_proba; };
const cProba *const cProba::operator=(const cProba *const rhs) {
std::cout << "cProba operator=() \n";
if(this == rhs)
return this;
*this->i_proba = rhs->i_getProba();
return this; }
cProba::operator short()const {
std::cout << "cProba konverzios operator \n";
return (short(*i_proba)); }
int main() {
cProba obj1,obj2(4);
short k = 8;
std::cout << "\nobj1: "<< obj1.i_getProba() << std::endl
<< "obj2: "<< obj2.i_getProba() << std::endl << std::endl;
obj1 = obj2;
std::cout << "obj1: "<< obj1.i_getProba() << std::endl
<< "obj2: "<< obj2.i_getProba() << std::endl << std::endl;
obj2 = k;
std::cout << "obj1: "<< obj1.i_getProba() << std::endl
<< "obj2: "<< obj2.i_getProba() << std::endl << std::endl;
return 0; }
obj2 = k;
Csak akkor működik ez rosszul,hogy ha az obj2 már egy meglévő objektum.
Ha az obj2 nem létező objektum még tehát így nézne ki:
cProba obj2 = k
Akkor csak lefutna az egy argumentumot váró konstruktor ami létrehozza a obj2 objektumot.
De ha az obj2 már egy meglévő objektum akkor már így rossz:
obj2 = k
Nem értem miért nem jó így.
Ebben az esetben mi történik mi hívódik meg stb el tudnátok magyarázni?
És még egy valami van amit nem értek nagyon megköszönném egy zöld kézzel ha elmagyaráznátok ezt is:
cProba::operator short()const {
....std::cout << "cProba konverzios operator \n";
....return (short(*i_proba)); }
Ebben a sorban:
::operator short
Az operator után látható short azzal én mit jelzek a fordítónak?Mert ez akkor is működik jól ha egy int típúst kell konvertálni short helyett.
És itt is:
(short(*i_proba));
Ez az hogy egy short típust adok vissza?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!