| | |
| Stránka: 1 z 1
| [ Príspevkov: 4 ] | |
Autor | Správa |
---|
Registrovaný: 20.10.08 Prihlásený: 27.04.12 Príspevky: 25 Témy: 10 |
zdravim, citam knihu mistrovstvi c++ a dostal som sa na cvicenie z ktoreho sa neviem dostat dalej.
Konkretne je to cvicenie 1 v lekcii cislo 12. Mam urcenu delkaraciu triedy a mam napisat definicie clenskych funkcii a funkciu main ktora ich vyuzije...
Môj kod je:
Kód: #include <iostream> #include <cstring> using namespace std;
class Cow //delkaracia urcena v knihe { private: char name[20]; char * hobby; double weight; public: Cow(); Cow(const char * nm, const char * ho, double wt); Cow(const Cow &c); ~Cow(); Cow & operator=(const Cow & c); void ShowCow(); };
Cow::Cow() { strcpy(name, "Nezname"); hobby = new char[9]; strcpy(hobby, "Flakanie"); weight = 0; }
Cow::Cow(const char *nm, const char *ho, double wt) { strcpy(name, nm); hobby = new char[strlen(ho)]; strcpy(hobby, ho); weight = wt; }
Cow::Cow(const Cow &c) { strcpy(name, c.name); hobby = new char[strlen(c.hobby)]; strcpy(hobby, c.hobby); weight = c.weight; }
Cow & Cow::operator =(const Cow &c) { if(this == &c) return *this; strcpy(name, c.name); delete [] hobby; hobby = new char[strlen(c.hobby)]; strcpy(hobby, c.hobby); weight = c.weight; return *this; }
Cow::~Cow() { delete [] hobby; }
void Cow::ShowCow() { cout << "Meno: " << name << endl; cout << "Hobby: " << hobby << endl; cout << "Vaha: " << weight << endl; }
int main() { Cow c1; Cow c2("Milka", "Futbal", 600); cout << "Vypis c1 a c2\n"; c1.ShowCow(); c2.ShowCow(); cout << "Priradenie c2 do c1:\n"; c1 = c2; cout << "C1 teraz:\n"; c1.ShowCow(); Cow c3("Etela", "Hokej", 650); Cow c4(c3); cout << "C4 inizializovane c3:\n"; c4.ShowCow(); cout << "Koniec.\n"; cin.get(); cin.get(); return 0; }
Ked tento program zkompilujem tak normalne prebehne ako ma ale na konci ked sa rusia objekty tak mi vybehne toto okno: http://imageshack.us/photo/my-images/404/snmkaq.jpg/
Aku tam mam prosim chybu?
Za vsetky odpovede vopred dakujem.
|
|
Registrovaný: 11.01.09 Prihlásený: 18.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 30.10.2011 14:44 | |
|
Po rychlom prezreti som si vsimol akurat tuto vec:
Kód: hobby = new char[strlen(ho)]; strcpy(hobby, ho); Toto urcite nerobi nic dobre, nakolko funkcia strlen vracia pocet znakov retazca bez nuloveho znaku. Cize ak je ho rovne "Futbal", funkcia vrati 6 a premenna hobby teda bude mat alokovanu velkost pre 6 znakov. Nasledne tu pomocou funkcie strcpy skopirujes cely obsah premennej ho (co je 6 znakov + nulovy znak ), cize zapisujes uz za pole. Neviem, ci toto je dovod tvojej chyby, no rozhodne to treba upravit. Skusal som to skompilovat g++ kompilerom a ani vo wine ani v linuxe mi neukazalo ziadnu chybu. Tak si skus vsade opravit tu alokaciu, ci je prave ta povodcom chyby: Kód: hobby = new char[strlen(ho)+1]; // vsade pridat +1 pre ukoncovaci nulovy znak
|
|
Registrovaný: 13.11.07 Prihlásený: 20.08.16 Príspevky: 1702 Témy: 0 | Napísal chrono: 30.10.2011 17:11 | |
|
Tiež som to neskúšal, každopádne ak by som sa išiel učiť C++ a v knihe (alebo čo to vlastne číta), by používali C reťazce, tak by som si našiel lepšiu knihu.
|
|
Registrovaný: 08.03.09 Prihlásený: 06.10.20 Príspevky: 1116 Témy: 88 Bydlisko: 00100100 | Napísal reDo: 01.11.2011 19:49 | |
|
ja som ich tiez robil vsetky a tuto mam takto ak ti to pomoze
cow.hpp
Kód: #ifndef COW_HPP_INCLUDED #define COW_HPP_INCLUDED
class Cow { private: char name[20]; char * hobby; double weight;
public: Cow(); Cow(const char * nm, const char * ho, double wt); Cow(const Cow & c); ~Cow(); Cow & operator=(const Cow & c); void ShowCow() const; };
#endif // COW_HPP_INCLUDED
cow.cpp Kód: #include "cow.hpp" #include <iostream> #include <cstring>
Cow::Cow() { strcpy(name,"cow"); hobby = new char[20]; strcpy(hobby,"hobby"); weight = 0; }
Cow::Cow(const char * nm, const char * ho, double wt) { strcpy(name,nm); hobby = new char[strlen(ho)+1]; strcpy(hobby,ho); weight = wt; }
Cow::Cow(const Cow & c) { strcpy(name,c.name); hobby = new char[strlen(c.hobby) + 1]; strcpy(hobby, c.hobby); // copy string to new location weight = c.weight; }
Cow::~Cow() { delete [] hobby; }
Cow & Cow::operator=(const Cow & c) { if (this == &c) // object assigned to itself return *this; // all done delete [] hobby; // free old string strcpy(name,c.name); weight = c.weight; hobby = new char [strlen(c.hobby)+ 1]; // get space for new string strcpy(hobby, c.hobby); // copy the string return *this; // return reference to invoking object }
void Cow::ShowCow() const { std::cout<<"name: "<<name<<std::endl<<"hobby: "<<hobby<<std::endl<<"weight: "<<weight<<std::endl; }
main.cpp Kód: #include "cow.hpp"
int main() { Cow cow, cow2("reDo","C++",200); cow.ShowCow(); cow2.ShowCow();
Cow newCow = cow2, newCow2; newCow.ShowCow(); newCow2 = cow2; newCow2.ShowCow();
return 0; }
_________________ Programming is The Best
Hackers Are Not Crackers!!! Hackers build things, crackers break them!
;-) |
|
| Stránka: 1 z 1
| [ Príspevkov: 4 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| K: Mistrovstvi v c++ v Kúpim | 0 | 281 | 19.06.2011 21:24 brky3 | | pomoc s ulohou z c++ v Assembler, C, C++, Pascal, Java | 1 | 293 | 23.07.2013 6:31 BX | | P: Mistrovstvi v C++ 3. vydanie v Predám | 0 | 348 | 21.03.2010 9:24 ado21 | | I/P: Mistrovství v C++ 4. aktualizované vydání v Predám | 7 | 365 | 26.06.2017 15:16 ado130 | | Mistrovství v AJAXu (problem) v JavaScript, VBScript, Ajax | 1 | 515 | 11.09.2009 14:26 Ďuri | | Pascal - problem s ulohou(subory) v Assembler, C, C++, Pascal, Java | 3 | 963 | 14.12.2009 18:39 Proxy69 | | C/C++ problém so súbormi a hodnotami v Assembler, C, C++, Pascal, Java | 2 | 308 | 09.12.2012 10:43 nBXXL | | mistrovstvi v assemblery v Assembler, C, C++, Pascal, Java | 24 | 1657 | 10.08.2009 21:59 euthanan | | Pomoc s ulohou v PHP v PHP, ASP | 13 | 1091 | 16.02.2007 7:14 zero0x | | Pomoc s ulohou v pascale v Assembler, C, C++, Pascal, Java | 3 | 413 | 09.01.2010 19:01 ac.milan | | potrebujem pomoc s jednou ulohou v Assembler, C, C++, Pascal, Java | 28 | 1329 | 28.05.2009 17:11 neutronmind | | pomoc s ulohou v php.. v PHP, ASP | 10 | 1185 | 04.01.2006 0:00 Pekaboo | | P: Mistrovství v ajaxu v Predám | 0 | 382 | 17.06.2011 14:33 sedlák | | Mistrovství ČR v bojovkách v Počítačové hry | 0 | 977 | 07.06.2006 22:54 p55p | | Mistrovství Slovenska v přetaktování - reportáž v Novinky | 4 | 640 | 12.01.2009 21:21 zmija31 | | Problem C&C Generals v Počítačové hry | 20 | 1235 | 12.10.2007 21:09 Matokoko |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|