Kezdőoldal » Számítástechnika » Programozás » Ezt elmagyarázná valaki?

Ezt elmagyarázná valaki?

Figyelt kérdés

//A program már tudja kezelni ezeket a hozzárendeléseket.

unsigned short TheShort = 0;

const CAT *Morcos = new CAT(4,5);

TheShort = *Morcos;


A fordító szerint az a baj,hogy a morcos az egy constans.

Igen igaza van,ez így is van.

De nem értem hát itt nem történik semmilyen változtatás.

A morcosnak én itt nem akarom megváltoztatni az értékét.

itt csak a morcos beleteszi az életkorát a TheUshortba. Tehát a morcoshoz nem rendelődik új érték úgy.hogy nem értem magyarázza el valaki,hogy akkor miért problémázik.


Megérteném hogy mi a baj,ha a morcosnak akarnám az életkorát megváltoztatni mert nem tudnám mert konstans

sőt még új memóriacímre sem mutathat mert ez egy konstans objektumra mutató konstans mutató.


De ezt már nem értem,hogy miért nem tudom a konstans objektumnak az értékét hozzárendelni egy unsigned short változóhoz.

Magyarázza el valaki.


Hisz működnie kellene mert azzal,hogy hozzárendelném nem változna az objektum értéke.

..............................................

Ez meg egy másik probléma amit nem értek: //Hozzáteszem ennek a problémának semmi köze az elsőhöz.

itt a forráskód:

//main.cpp

# include <iostream> //std::cout,std::cin,std::endl

# include <string> //std::string

# include <stdlib.h> //EXIT_SUCCESS

# include <windows.h> //Sleep(1000),exit()


typedef unsigned short ushort; //szinoníma létrehozás

typedef unsigned int uint; //szinoníma létrehozás


using std::cout; //std:: elhagyása

using std::cin; //std:: elhagyása

using std::endl; //std:: elhagyása

using std::string; //std:: elhagyása



//CAT definíció

class CAT

{

public:

CAT(ushort age,ushort weight); //Konstruktor1

CAT(); //Konstruktor2

CAT(ushort age); //Konstruktor3 - beépített típust objektumá.

CAT(const CAT&); //Copy konstruktor

~CAT(); //destruktor

const CAT operator=(const CAT &rhs); //operator=


const CAT& operator++(); //prefix

const CAT operator++(int); //postfix

const CAT operator+(const CAT &rhs); //operator+

operator ushort(); //


void SetAge(ushort age); //SetAge

ushort GetAge()const; //GetAge

void SetWeight(ushort weight); //SetWeight

ushort GetWeight()const; //GetWeight

void IncrementPlusz(); //IncrementPlusz

private:

ushort *itsAge;

ushort *itsWeight;

};

//CAT osztály:definíciók

//Konstruktor:{Konstruktor1,Konstruktor2,Konstruktor3,Copy konstruktor,Destruktor,operator=}

CAT::CAT(ushort age,ushort weight):

itsAge(new ushort(age)),

itsWeight(new ushort(weight))

{cout <<"Konstruktor1 \n";}


CAT::CAT():

itsAge(new ushort(0)),

itsWeight(new ushort(0))

{cout <<"Konstruktor2 \n";}


CAT::CAT(ushort age):

itsAge(new ushort(age)),

itsWeight(new ushort(0))

{cout <<"Konstruktor3 \n";}


CAT::CAT(const CAT &rhs)

{

itsAge = new ushort;

itsWeight = new ushort;

*itsAge = rhs.GetAge();

*itsWeight = rhs.GetWeight();

}


CAT::~CAT()

{

cout <<"Destruktor \n";

delete itsAge;

delete itsWeight;

itsAge = NULL;

itsWeight = NULL;

}


const CAT CAT::operator=(const CAT &rhs)

{

cout <<"operator= \n";

if(this==&rhs)

return *this;

delete itsAge;

delete itsWeight;

itsAge = new ushort;

itsWeight = new ushort;

*itsAge = rhs.GetAge();

*itsWeight = rhs.GetWeight();

return *this;

}

//operator:{operator++ prefix,operator++ postfix,operator+,operator ushort}

const CAT& CAT::operator++()

{

cout <<"operator++ \n";

++*itsAge;

++*itsWeight;

return *this;

}


const CAT CAT::operator++(int)

{

cout <<"operator++ \n";

++*itsAge;

++*itsWeight;

return *this;

}


const CAT CAT::operator+(const CAT &rhs)

{

cout <<"operator+ \n";

return CAT(*itsAge+rhs.GetAge(),*itsWeight+rhs.GetWeight());

}


CAT::operator ushort()

{

cout <<"operator ushort \n";

return(ushort(*itsAge));

}

//Metódusok:{SetAge,GetAge,SetWeight,GetWeight,IncrementPlusz}

void CAT::SetAge(ushort age)

{*itsAge = age;}


ushort CAT::GetAge()const

{return *itsAge;}


void CAT::SetWeight(ushort weight)

{*itsWeight = weight;}


ushort CAT::GetWeight()const

{return *itsWeight;}



//main kezdődik

int main()

{

const ushort TheUshort; /* Miért nem fordul le ha a TheUshort-ot konstansként deklarálom? */

const CAT *const Bolyhos = new CAT(4,5);

const CAT *const Morcos = new CAT(5,6);

CAT *const Cirmi = new CAT();


cout <<"\nBolyhos most "<< Bolyhos->GetAge() <<" eves \n"

<<"Cirmi most "<< Cirmi->GetAge() <<" eves \n"

<<"Morcos most "<< Morcos->GetAge() <<" eves \n\n"


<<"Bolyhos most "<< Bolyhos->GetWeight() <<" kg \n"

<<"Cirmi most "<< Cirmi->GetWeight() <<" kg \n"

<<"Morcos most "<< Morcos->GetWeight() <<" kg \n\n";

*Cirmi = *Cirmi + *Morcos;

cout <<"\nBolyhos most "<< Bolyhos->GetAge() <<" eves \n"

<<"Cirmi most "<< Cirmi->GetAge() <<" eves \n"

<<"Morcos most "<< Morcos->GetAge() <<" eves \n\n"


<<"Bolyhos most "<< Bolyhos->GetWeight() <<" kg \n"

<<"Cirmi most "<< Cirmi->GetWeight() <<" kg \n"

<<"Morcos most "<< Morcos->GetWeight() <<" kg \n\n";

TheUshort = *Cirmi;

cout <<"TheUshort: "<< TheUshort << endl

<<"Morcos most "<< Morcos->GetAge() <<" eves \n"

<<"Morcos most "<< Morcos->GetWeight() <<" kg \n\n";

*Cirmi = TheUshort;

cout <<"\nTheUshort: "<< TheUshort << endl

<<"nMorcos most "<< Morcos->GetAge() <<" eves \n"

<<"Morcos most "<< Morcos->GetWeight() <<" kg \n\n";


delete Bolyhos;

delete Morcos;

delete Cirmi;


return EXIT_SUCCESS;

}


//Miért nem fordul le ha a TheUshort-ot konstansként deklarálom?


2012. ápr. 12. 19:57
 1/10 A kérdező kommentje:

a const ushort TheUshort nak még nincs értéke úgy,hogy le kéne fordulnia de nem teszi.


Rosszul tudom?

Ha constans-ként deklarálok valamit akkor annak azonnal értéket kell adni és nem lehet neki később ez a baj?

2012. ápr. 12. 20:01
 2/10 anonim ***** válasza:
:DDD
2012. ápr. 12. 20:26
Hasznos számodra ez a válasz?
 3/10 A kérdező kommentje:
Valaki szolgálna egy kis magyarázattal is? :D
2012. ápr. 12. 20:42
 4/10 A kérdező kommentje:
Miért nem írtok két kérdésem van csak?
2012. ápr. 12. 21:19
 5/10 iostream ***** válasza:

Hát szolgálhatok magyarázattal, de úgyse fogod megérteni, tapasztalatok alapján.


A konstans értéke nem változik az élettartama során. Tehát nyílván nem tudsz neki értéket adni később (TheUshort = *Cirmi;), és mivel nem kaphat értéket később, muszáj neki akkor értéket adni, amikor létrehozod.

Benne lehetett volna a nyelvben, hogy ne legyen kötelező neki értéket adni, de semmi értelme, és nagyon error-prone.

2012. ápr. 12. 21:38
Hasznos számodra ez a válasz?
 6/10 A kérdező kommentje:

//És az első kérdésemre mi a válasz?

//Első kérdésem:

unsigned short TheShort = 0;

const CAT *Morcos = new CAT(4,5);

TheShort = *Morcos;


A fordító szerint az a baj,hogy a morcos az egy constans.

Igen igaza van,ez így is van.

De nem értem hát itt nem történik semmilyen változtatás.

A morcosnak én itt nem akarom megváltoztatni az értékét.

itt csak a morcos beleteszi az életkorát a TheUshortba. Tehát a morcoshoz nem rendelődik új érték úgy.hogy nem értem magyarázza el valaki,hogy akkor miért problémázik.


Megérteném hogy mi a baj,ha a morcosnak akarnám az életkorát megváltoztatni mert nem tudnám mert konstans

sőt még új memóriacímre sem mutathat mert ez egy konstans objektumra mutató konstans mutató.


De ezt már nem értem,hogy miért nem tudom a konstans objektumnak az értékét hozzárendelni egy unsigned short változóhoz.

Magyarázza el valaki.


Hisz működnie kellene mert azzal,hogy hozzárendelném nem változna az objektum értéke.

2012. ápr. 12. 21:48
 7/10 iostream ***** válasza:

Próbáld meg úgy, hogy

CAT::operator ushort() const

szignatúrával vezeted be a konverziós operátort.

2012. ápr. 13. 00:06
Hasznos számodra ez a válasz?
 8/10 A kérdező kommentje:

És ezt miért kell így?

Jó volna tudni a magyarázatot is.

Léci mondja el valaki.

2012. ápr. 13. 15:20
 9/10 iostream ***** válasza:

Léci helyett légyszi.

És azért, mert a Morcos egy konstans, és egy konstans objektumon csak konstans függvényeket hívhatsz meg. Ez azért van, mert a konstans függvények nem tudják megváltoztatni az objektum állapotát.

2012. ápr. 13. 15:23
Hasznos számodra ez a válasz?
 10/10 A kérdező kommentje:

Pedig ezt tudtam és még is elkövettem ezt a hibát. :(

A legrosszabb,hogy nem jöttem rá.

2012. ápr. 13. 15:32

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, 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!