Форум программистов, компьютерный форум CyberForum.ru

Ошибка в конструкторе класса - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Дана точка на плоскости с координатами (х, у). Составить программу, которая выдает одно из сообщений "Да", "Нет", "На http://www.cyberforum.ru/cpp-beginners/thread1162604.html
C++ Все целые числа из диапазона от А до В (А В), оканчивающиеся на любую четную цифру Вывести на экран: Замечание. Решите каждую задачу тремя способами - используя операторы цикла while, do while и for. http://www.cyberforum.ru/cpp-beginners/thread1162598.html
C++ Error C2065: 'strcpy' : undeclared identifier
class String { protected: char *PointerToString; // Указатель на строку int StringSize; // Длина строки public: String ( char * ); // Конструктор ~String ( ); // Деструктор void Print( ); String operator+ ( String ); // Перегрузка операции }; // "+"
C++ Пошаговый алгоритм выполнения программы
Составьте пожалуйста пошаговый алгоритм выполнения( тема : Перегрузка операций - тут бинарное сложение) #include <iostream> using namespace std; /////////////////////////////////////////////////////////// class Distance // класс английских мер длины { private: int feet; float inches;
C++ Найти номер первого максимального элемента http://www.cyberforum.ru/cpp-beginners/thread1162587.html
Найти номер первого максимального элемента.
C++ Бред при декомпиляции Всем привет!У меня такая проблема, при дэкомпиляции у меня получается всякий бред типо jddvb:56/df;v:j/:u19vghj незнаю что делать и из за чего это происходит?Всем спасибо! подробнее

Показать сообщение отдельно
d01
2 / 2 / 1
Регистрация: 10.01.2014
Сообщений: 37
30.04.2014, 14:35     Ошибка в конструкторе класса
Всем доброго времени суток!
Есть простая задачка: Написать реализацию класса и короткую программку, использующую все функции-члены.

Есть объявление класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef COW_H
#define COW_H
 
class Cow
{
private:
    char name[20];
    char *hobby;
    double weight;
public:
    Cow();
    Cow(const char * nm, const char * ho, double wt);
    Cow(const Cow &);
    ~Cow();
    Cow & operator=(const Cow &);
    void ShowCow() const;
};
 
 
#endif
Реализация:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include "Cow.h"
 
using std::cout;
using std::endl;
 
Cow::Cow()
 
{
    char name[20] = {"Burenka"};
    hobby = "eating grass";                                      
    weight = 255.5;
    
    //для отладки
    cout<<"Cow() :"<<'('<<name<<','<<hobby<<','<<weight<<')'<<endl;  
 
}
 
Cow::Cow(const char * nm, const char * ho, double wt)
{
    strcpy(name, nm);
    
    hobby = new char[strlen(ho)+1];                            
    strcpy(hobby, ho);
    
        weight = wt;
    
    //для отладки
    cout<<"Cow() :"<<'('<<name<<','<<hobby<<','<<weight<<')'<<endl;
}
 
Cow::Cow(const Cow &other)
{
    
    strcpy(name, other.name); 
        
    hobby = new char[strlen(other.hobby)+1];         
    strcpy(hobby, other.hobby);
        
    weight = other.weight;
    
    //для отладки
    cout<<"Cow() :"<<'('<<name<<','<<hobby<<','<<weight<<')'<<endl;
 
}
 
Cow::~Cow()
{
    //delete[] hobby;
}
ну и вот собственно тестирую, как работают конструкторы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "Cow.h"
 
 
 
int main()
{
    Cow a;                                                //ok
    Cow b("Marusya","Eat",200.1);             //ok
    Cow q("Zinaida","gives milk",300);       //ok
    Cow c=q;                                            //ok
        Cow c=a;                                            //мусор в name
 
}
Так вот, так: Cow c=q; конструктор копирования работает, все ок, а так: Cow c=a; в name попадает какой-то мусор, то есть в том случае, когда я копирую, объект созданный базовым конструктором. Я так думаю, что проблема, где-то в неправильном определении name в конструкторе по-умолчанию.. Но не могу понять что я делаю не так...
Ну и вот.. еще один момент, который я пока не могу понять, почему когда я добавляю delete[] hobby; в деструктор, программа виснет.. Вроде все правильно делаю, освобождаю память, выделенную в конструкторе.. В общем, буду признателен, за указание на ошибки, может еще, что делаю не совсем так. Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru