[ Príspevkov: 4 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 20.10.08
Prihlásený: 27.04.12
Príspevky: 25
Témy: 10 | 10
NapísalOffline : 30.10.2011 12:49 | problem s ulohou v mistrovstvi c++

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.


Offline

Skúsený užívateľ
Skúsený užívateľ
problem s ulohou v mistrovstvi c++

Registrovaný: 11.01.09
Prihlásený: 27.10.26
Príspevky: 1401
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 30.10.2011 14:44 | problem s ulohou v mistrovstvi c++

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


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 13.11.07
Prihlásený: 20.08.16
Príspevky: 1702
Témy: 0 | 0
NapísalOffline : 30.10.2011 17:11 | problem s ulohou v mistrovstvi c++

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. :)


Offline

Užívateľ
Užívateľ
problem s ulohou v mistrovstvi c++

Registrovaný: 08.03.09
Prihlásený: 17.01.25
Príspevky: 1116
Témy: 88 | 88
Bydlisko: 00100100
NapísalOffline : 01.11.2011 19:49 | problem s ulohou v mistrovstvi c++

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!
;-)
 [ Príspevkov: 4 ] 


problem s ulohou v mistrovstvi c++



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

K: Mistrovstvi v c++

v Bazár

0

346

19.06.2011 21:24

brky3

V tomto fóre nie sú ďalšie neprečítané témy.

pomoc s ulohou z c++

v Backend

1

368

23.07.2013 6:31

BX

V tomto fóre nie sú ďalšie neprečítané témy.

P: Mistrovstvi v C++ 3. vydanie

v Bazár

0

411

21.03.2010 9:24

ado21

V tomto fóre nie sú ďalšie neprečítané témy.

I/P: Mistrovství v C++ 4. aktualizované vydání

v Bazár

7

432

26.06.2017 15:16

ado130

V tomto fóre nie sú ďalšie neprečítané témy.

Mistrovství v AJAXu (problem)

v Frontend

1

595

11.09.2009 14:26

Ďuri

V tomto fóre nie sú ďalšie neprečítané témy.

Pascal - problem s ulohou(subory)

v Ostatné

3

1053

14.12.2009 18:39

Proxy69

V tomto fóre nie sú ďalšie neprečítané témy.

C/C++ problém so súbormi a hodnotami

v Backend

2

430

09.12.2012 10:43

nBXXL

V tomto fóre nie sú ďalšie neprečítané témy.

mistrovstvi v assemblery

v Backend

24

1755

10.08.2009 21:59

euthanan

V tomto fóre nie sú ďalšie neprečítané témy.

pomoc s ulohou v php..

v Backend

10

1270

04.01.2006 0:00

Pekaboo

V tomto fóre nie sú ďalšie neprečítané témy.

Pomoc s ulohou v PHP

v Backend

13

1200

16.02.2007 7:14

zero0x

V tomto fóre nie sú ďalšie neprečítané témy.

potrebujem pomoc s jednou ulohou

v Backend

28

1451

28.05.2009 17:11

neutronmind

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie.

Pomoc s ulohou v pascale

v Backend

3

493

09.01.2010 19:01

ac.milan

V tomto fóre nie sú ďalšie neprečítané témy.

Mistrovství ČR v bojovkách

v Hry a herné konzoly

0

1055

07.06.2006 22:54

p55p

V tomto fóre nie sú ďalšie neprečítané témy.

P: Mistrovství v ajaxu

v Bazár

0

482

17.06.2011 14:33

sedlák

V tomto fóre nie sú ďalšie neprečítané témy.

Mistrovství Slovenska v přetaktování - reportáž

v Novinky

4

698

12.01.2009 21:21

zmija31

V tomto fóre nie sú ďalšie neprečítané témy.

C&C Generals problem

v Hry a herné konzoly

2

769

16.01.2011 12:35

Luks



© 2005 - 2026 PCforum, edited by JanoF