Kezdőoldal » Számítástechnika » Programozás » Itt mi történik miért lesz...

Itt mi történik miért lesz értelmetlen érték az obj2 tagváltozójába?

Figyelt kérdés

// 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; }


2012. szept. 19. 15:47
 1/2 A kérdező kommentje:

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?

2012. szept. 19. 15:51
 2/2 A kérdező kommentje:

É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?

2012. szept. 19. 16:02

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!