Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Почему выдает ошибку при работе с большим файлом, напишите как исправить ? https://www.cyberforum.ru/ cpp-beginners/ thread1504643.html
Помогите пожалуйста, данная программа берет текст из документа 1.txt ( если документ маленький то всё работает а если большой то выдает ошибку ) обрезает текст и перезаписывает в документ 3.txt ...
C++ "Морской бой": массив указателей на объекты vs контейнер stl. Что лучше?
Задание такое: Задача№2 Разработать программу «Морской бой», где пользователь будет видеть свои 2 игровых поля и вводить соответствующие значения и видеть результат операции (попал/убил/промазал)....
C++ Глючная Visual Studio не хочет устанавливаться правильно
Версии 2013 и 2015 не хотят устанавливаться нормально. Постоянно какие-то проблемы и вылазит куча предупреждений \ ошибок. Установил Visual Studio 2015 и при компиляции минимального файла c++: int...
C++ Непонятный код и функция FindWindow Есть код: CWnd* pWnd = CWnd::FindWindow("XLMAIN", NULL); if (pWnd != NULL) { TRACE("Excel window found\n"); pWnd->ShowWindow(SW_SHOWNORMAL); pWnd->UpdateWindow(); ... https://www.cyberforum.ru/ cpp-beginners/ thread1504605.html
C++ Подключение excel. Непонятная ошибка https://www.cyberforum.ru/ cpp-beginners/ thread1504592.html
Здорова! Подключил excel в с++ программу и хз. вылазит ошибка: 1>d:\visual studio 2010\projects\ex25d\ex25d\debug\excel.tlh(574): error C3121: невозможно изменить GUID для класса "IFilter" 1> ...
C++ Что такое Visual C++
Что это такое, и чем оно отличается от обычного стандарт C++?
Передвижение окна при нажатии клавишей мышки и перетягивании C++
Как на c++ сделать передвижение окна при нажатие и перетягивание клавишей мышки в опредильонной области окна?
C++ Рисовать мигающий курсор на виджете с данной частотой Требуется рисовать мигающий курсор на виджете. Причем делать это нужно с постоянной частотой. Если кто знает не костыльный способ поделитесь плиз. https://www.cyberforum.ru/ cpp-beginners/ thread1504539.html
C++ Borland c++ 5.02 ругается на istream_iterator https://www.cyberforum.ru/ cpp-beginners/ thread1504531.html
Здравствуйте. Компилятор старый, но нужен именно он. В инклудах есть iterator.h Не могу запустить код из книжки братьев дейтеил. #include <iterator> #include <conio.h> #include <iostream> int...
C++ Приведение указателей В функции в качестве параметра передаю указатель на один из самых базовых классов . Затем в функции вызываю функцию, которой нет в базовом классе, но которая есть в классе указатель на который я... https://www.cyberforum.ru/ cpp-beginners/ thread1504528.html
0 / 1 / 2
Регистрация: 25.07.2015
Сообщений: 18
0

Не выполняется перегруженный оператор присваивания

25.07.2015, 05:52. Просмотров 346. Ответов 4
Метки (Все метки)

Подскажите пожалуйста, почему ругается компилятор? Я только начал изучать С++ по книге Шилдта, и там написана вот эта программа. В 93 строке выскакивает ошибка мол то что перегруженному оператору= нужны два объекта тип sample, но ведь как я понимаю функция input() возвращает как раз таки объект sample, или я что-то упустил? в книге эта программа выполняется.
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
#include <cstring>
#include <cstdlib>
 
using namespace std;
 
class sample {
    char *s;
 
public:
    sample ();
 
    sample(const sample &ob); //Конструктор копии
 
    ~sample() {
        if(s) delete [] s;
 
        cout<< "Oswobojdenie s-pamiati \n";
    }
 
    void show() {
        cout << s<< "\n";}
 
    void set(char *str);
 
    sample operator=(sample &ob);
 
};
 
//Обычный конструктор
 
sample:: sample()
{
    s =new char('\0'); //Член S указывет на нуль строку
}
 
// Конструктор копии
 
sample::sample (const sample &ob)
 
{
    s = new char[strlen(ob.s) +1];
    strcpy (s, ob.s);
 
}
 
//Загрузка строки
 
void sample::set(char *str)
{
    s = new char[strlen(str) +1];
 
    strcpy(s, str);
}
 
//Перегрузка оператора присваивания
 
sample sample::operator=(sample &ob)
{
   /*Если выделенная область памяти имеет недостаточный размер,
выделяется новая область памяти.*/
    if (strlen(ob.s)> strlen(s)) {
        delete [] s;
        s=new char[strlen(ob.s)+1];
    }
    strcpy(s, ob.s);
    return *this;
}
 
//Эта функция возвращает объект типа sample
 
sample input()
{
    char instr[80];
 
    sample str;
 
    cout<< "Wwedite stroku: ";
 
    cin >> instr;
 
    str.set(instr);
 
    return str;
}
 
int main()
{
    sample ob;
 
    //Присваиваем объект, возвращаемый функцией input(), объекту ob.
 
    ob = input();
 
    ob.show();
 
    return 0;
 
}


Вернуться к обсуждению:
Не выполняется перегруженный оператор присваивания
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2015, 05:52
Готовые ответы и решения:

Перегруженный оператор присваивания
Достаточно информации прочитал, что такое перегруж. оператор присваивания, но не до конца понимаю...

Перегруженный оператор присваивания
Добрый вечер! Встретил пример в книге, где есть перегруженный оператор присваивания. В итоге код...

Не работает перегруженный оператор присваивания
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;Windows.h&gt; class OutOfBoundsException {}; class...

Очередь, конструктор копирования и перегруженный оператор присваивания
#include &lt;iostream&gt; using namespace std; typedef char type; struct Node { type element;...

4
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.