Mi a hiba a forráskódban? Segítség nagyon sürgős.
Lefordul nincs warning se de amikor elindítom hiba miatt leáll a progi.
........
//main.cpp
# include <iostream> //cout,cin,endl
# include <stdlib.h> //EXIT_SUCCESS
# include <string> //string
# include <windows.h> //Sleep(99),exit(0)
typedef unsigned short ushort;
typedef unsigned short uint;
using std::cout;
using std::cin;
using std::endl;
using std::string;
//CAT deklaration
class CAT
{
public:
CAT(); //konstruktor1
CAT(ushort age,ushort weight); //konstruktor2
CAT(ushort age); //konstruktor3
CAT(const CAT &rhs); //copy konstruktor
~CAT(); //destruktor
const CAT operator=(const CAT &rhs); //operator=
const CAT operator++(); //operator++ prefix
const CAT operator++(int); //operator++ postfix
const CAT operator+(const CAT &rhs); //operator+
ushort GetAge()const;
void SetAge(ushort age);
ushort GetWeight()const;
void SetWeight(ushort weight);
private:
ushort *itsAge;
ushort *itsWeight;
};
//CAT definition
//konstruktor1,konstrktor2,konstruktor3,copy konstruktor,destruktor,operator=
CAT::CAT():
itsAge(new ushort(1)),
itsWeight(new ushort(2))
{cout <<"Konstruktor1 \n";}
CAT::CAT(ushort age,ushort weight):
itsAge(new ushort(age)),
itsWeight(new ushort(weight))
{cout <<"Konstruktor2 \n";}
CAT::CAT(ushort age):
itsAge(new ushort(age))
{cout <<"Konstruktor3 \n";}
CAT::CAT(const CAT &rhs)
{
cout <<"Copy konstruktor \n";
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++ pre,operator++ post,operator+
const CAT CAT::operator++()
{
cout <<"operator++ prefix \n";
++*itsAge;
++*itsWeight;
return *this;
}
const CAT CAT::operator++(int)
{
cout <<"operator++ postfix \n";
++*itsAge;
++*itsAge;
return *this;
}
const CAT CAT::operator+(const CAT &rhs)
{
cout <<"operator+ \n";
return CAT(*itsAge+rhs.GetAge(),*itsWeight+rhs.GetWeight());
}
//metódus:GetAge,SetAge,GetWeight,SetWeight
ushort CAT::GetAge()const
{return *itsAge;}
void CAT::SetAge(ushort age)
{*itsAge = age;}
ushort CAT::GetWeight()const
{return *itsWeight;}
void CAT::SetWeight(ushort weight)
{*itsWeight = weight;}
//main start
int main()
{
ushort TheUshort = 100;
CAT Bolyhos(3,6),Cirmi(4,8),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";
Morcos = Cirmi + Bolyhos;
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";
Morcos = TheUshort;
cout<<"Morcos most "<< Morcos.GetWeight() <<" kg \n\n";
return EXIT_SUCCESS;
}
De nem értem mit kell problémáznia lefordul és nincs warning itt a forráskód:
Szeretlek C++ :D. Igazán leírhattad volna hogy milyen nyelv...
Milyen hibát dob vissza? Betehetted volna azt is...
Le írtam,hogy nincs hiba.
No errors no warning.
Szépen lefordul csak amikor futtatom a progit akkor ki írja,hogy a windows hibát észlelt ezért a program leáll.
Most lefoglaltam a súlynak is de így sem jó.
CAT::CAT(ushort age):
itsAge(new ushort(age)),
itsWeight(new ushort(*itsWeight))
{cout <<"Konstruktor3 \n";}
Sikerült megfejtenem a magyarázatodat és már tudom mi a baj.
Lefoglaltam memóriaterületet az itsWeight számára is de úgy sem jó.
Nem tudom megoldani sajnos :(
CAT::CAT(ushort age):
itsAge(new ushort(age)),
itsWeight(new ushort()) //hogyan oldjam meg,hogy az itsWeight-ben mindig ugyanaz a érték maradjon mint az előző objektumban?
{cout <<"Konstruktor3 \n";}
Például:
CAT Morcos;
unsigned short TheUshort = 100;
Morcos = TheUshort;
Ugye ilyenkor meghívódik a konstruktor3 ami egy új objektumot csinál a Morcosból.
De én azt szeretném,hogy a Morcos itsWeight értéke ne vesszen el.
Ezt megtehetném úgy,hogy a konstruktor3 ban bele írom a súlyát is.
Így:
CAT::CAT(ushort age):
itsAge(new ushort(age)),
itsWeight(new ushort(8)) //Ide írtam a súlyát is.
{cout <<"Konstruktor3 \n";}
De ha növelem az itsWeight értékét egyel tehát kilenc lesz és ezután lefuttatom megint ezt a kódsort Morcos = TheUshort akkor itsWeight értéke vissza áll 8 ra.
Ezt nem akarom.
Mi a megoldás?
Ehhez valahogy meg kéne tudnod különböztetni az operator=-ben (merthogy ott íródik felül), hogy milyen objektumot is akarsz értékül adni Morcosnak.
Morcos = TheUshort;
Ez a sor azt fogja csinálni, hogy meghívja a hármas konstruktort TheUshort paraméterrel, csinál egy névtelen CAT objektumot, aminek 8 a súlya.
Aztán meghívja az operator=-t, ahol felülírja Morcos súlyát (és évét, de az neked jó) a saját 8 súlyával.
Javaslom, hogy ha ilyet akarsz, akkor inkább hívj egy setAge függvényt, vagy ilyesmi.
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!