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

Перегрузка оператора присваивания - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Считать из файла и записать массив http://www.cyberforum.ru/cpp-beginners/thread1096194.html
вопрос в комментарии, подскажите пожалуйста #include <iostream> using namespace std; struct book { string name; int year; string author; int id; }
C++ Определить каких положительных чисел больше в последовательности, кратных или не кратных 5? С клавиатуры вводится последовательность чисел.Количество чисел заранее не известно,но может быть очень большим.Числа последовательности находятся от -120 до 100.Определить каких положительных чисел... http://www.cyberforum.ru/cpp-beginners/thread1096187.html
Сравнить длину эллипса и окружности C++
Здраствуйте, помогите пожалуйста, должно быть два класса эллипс - базовый, окружность - клас-наследник, необходимо сравнить длину даных фигур. #include <iostream> #include <locale> #include...
Чапаеву нужно переплыть реку С++ C++
Чапаеву нужно переплыть реку Урал шириной B метров.Его скорость в стоячей воде V1 м,скорость реки V2.Под каким углом ему надо плыть,чтобы "не снесло",и сколько времени займет переправа?
C++ Сформировать двунаправленный список. Удалить из него Элементы, с одинаковыми ключевыми полями http://www.cyberforum.ru/cpp-beginners/thread1096176.html
Записи в линейном списке содержат ключевое поле типа *char(строка символов). Сформировать двунаправленный список. Удалить из него Элементы, с одинаковыми ключевыми полями. Добавить элемент после...
C++ Исчезает окно консоли по завершению работы программы Исчезает окно консоля....исправьте, пожалуйста, чтобы окно не пропадало #include "stdafx.h" #include <iostream> #include <cstdlib> #include <cmath> using namespace std; //Функция ввода... подробнее

Показать сообщение отдельно
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1

Перегрузка оператора присваивания - C++

13.02.2014, 22:07. Просмотров 494. Ответов 2
Метки (Все метки)

Задание простое: по заданному классу составить простую программу с использованием динамической памяти.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Cow
{
    char name[20];
    char* chobby;
    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;
};
1 файл:
Кликните здесь для просмотра всего текста
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
#include "h.h"
 
Cow::Cow()
{
    cout << "Вызван конструктор" << endl;
    chobby = NULL;
    weight = 0;
}
 
Cow::Cow(const char* nm, const char* ho, double wt)
{
    cout << "Вызван конструктор" << endl;
    strncpy(name,nm,20);
    chobby = new char[strlen(ho)+1];
    strcpy(chobby,ho);
    weight = wt;
}
 
Cow::Cow(const Cow & c)
{
    cout << "Вызван конструктор" << endl;
    strncpy(name,c.name,20);
    chobby = new char[strlen(c.chobby)+1];
    strcpy(chobby,c.chobby);
    weight = c.weight;
}
 
Cow::~Cow()
{
    cout << "Вызван деструктор:" << endl;
    delete [] chobby;
}
 
Cow & Cow::operator=(const Cow & c)
{
    cout << "Вызвана операция присваивания" << endl;
    if (&c == this)
        return *this;
    delete [] chobby;
    strncpy(name,c.name,20);
    chobby = new char[strlen(c.chobby)+1];
    strcpy(chobby,c.chobby);
    return *this;
}
 
void Cow::ShowCow() const
{
    cout << "name: " << name << endl;
    cout << "chobby: " << chobby << endl;
    cout << "weight: " << weight << endl;
}

2 файл:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <Windows.h>
#include "h.h"
 
using namespace std;
 
#define rus setlocale(0,"rus");SetConsoleCP(1251);SetConsoleOutputCP(1251);
 
int main()
{
    rus;
    cout << "Obj1:\n";
    Cow* Obj1 = new Cow;
    cout << "Obj2:\n";
    Cow* Obj2 = new Cow("ABC","DEF",582.1);
    cout << "Obj3:\n";
    Cow* Obj3 = new Cow(*Obj2);
    cout << "Obj4:\n";
    Cow* Obj4 = Obj1;
 
    Obj1->ShowCow();
    Obj2->ShowCow();
    Obj3->ShowCow();
    Obj4->ShowCow();
 
    Obj1->~Cow();
    Obj2->~Cow();
    Obj3->~Cow();
    Obj4->~Cow();
}


Объясните пожалуйста, в чем ошибка, на вызове Cow* Obj4 = Obj1; вылетает с необработанным исключением. Загвоздка где то в операции присваивания.

Вот, что пишет после прогона:

C++
1
2
3
4
5
6
7
8
9
Obj1:
Вызван конструктор
Obj2:
Вызван конструктор
Obj3:
Вызван конструктор
Obj4:
name: НННННННННННННННННННН
chobby:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru