Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 25

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

14.04.2017, 21:11. Показов 4701. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, задание в вузе дали, пытаюсь понять правильно ли я сделал его


Ввести с клавиатуры строку  символов . Признак окончания ввода строки - нажатие клавиши "Ввод". Программа должна содержать перегруженную операцию «=», использование которой скопирует S1 в S2 .

вот сам код программы, мне главное понять правильно ли я перегрузил операцию присваивания
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
100
101
102
#include <iostream> 
#include <string.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <istream>
#include <fstream>
using namespace std;
class X {
    char *str;
    int SIZE=255;
    char *str_return;
public:
    X();
    X(char*);
    ~X();   
    
    X& operator=(X & obj) { 
 
    strcpy(str, obj.get());
    return *this; 
} 
char* get(){
    return str;
};
    char* Run(); 
    void Set(char*);
    
 
 
    friend void print(X&); 
 
    friend char* Run(X&); 
    printFL();
};
X::X() {
    str = new char[SIZE];
    str[0] = '\0';
    str_return = new char[SIZE];
    str_return[0] = '\0';
};
X::X(char *s) {
    str = new char[SIZE];
    strcpy(str, s);
    str_return = new char[SIZE];
    str_return[0] = '\0';
};
X::~X() {
    delete[] str;
    cout << "...destructor has been called" << endl;
};
void X::Set(char* s) {
    for (unsigned int i = 0; i<strlen(s); i++) {
 
        str[i] = s[i];
        str[i] = '\0';
    }
};
char* X::Run() { 
    int j = 0;
    if (strlen(str) == 10) {
 
        for (int i = 0; i<strlen(str); i++) {
 
            if ((((int)str[i] >= 0) && ((int)str[i] <= 64)) || ((int)str[i] >= 91))
                str_return[j] = str[i], j++;
        }
 
        str_return[j] = '\0';
    }
    else strcpy(str_return, str);
 
    return str_return;
};
char* Run(X &obj) { return obj.Run(); };
void print(X &obj) { cout << obj.str << " " << obj.str_return << endl; };
 
 
    int X::printFL(){ 
   ofstream file("cout.txt"); 
   if (!file.is_open()) { 
   cout<<"error"; 
     }
   else{ 
   file<<str<<endl; 
   file<<str_return<<endl; 
  } 
  file.close() ; 
  } 
  int main() {
 
    char s[256];
    
    cout << "Type anything and press "Enter":" << endl;
    cin.getline(s, 256);
    X str(s);
    str.get();
    cout << "You have type:" << endl;
    print(str);
    cout << "Output string:" << endl;
    cout << Run(str) << endl;
 
    str.printFL();}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.04.2017, 21:11
Ответы с готовыми решениями:

Перегрузка оператора присваивания
Доброго времени суток! Возник вопрос по поводу перегрузки оператора присваивания. Пример перегрузки по канону: class Integer { ...

Перегрузка оператора присваивания
Здравствуйте! Помогите, пожалуйста разобраться с перегрузкой оператора присваивания. Нужно написать класс матрица, в котором есть...

Перегрузка оператора присваивания
Задание простое: по заданному классу составить простую программу с использованием динамической памяти. class Cow { char name; ...

31
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 25
14.04.2017, 23:25  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от nd2 Посмотреть сообщение
s1 нужно выводить.
ошибся да. вопрос был в том правильная ли перегрузка задана, и я никак не могу понять правильная ли она?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
14.04.2017, 23:26
Цитата Сообщение от kmkdz_g Посмотреть сообщение
и я никак не могу понять правильная ли она?
...
Цитата Сообщение от nd2 Посмотреть сообщение
Неправильно, и не только это.
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 25
14.04.2017, 23:27  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
...
можно наводку у знатока? в вашем лице



C++
1
2
3
4
5
6
7
8
9
X(int i): str2(i) 
    {}
 
    X& operator=(X& obj) {
       
       
        str2 =obj.str2;
        return *this;
    }
крашит программу
отладочная печать не помогла
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
14.04.2017, 23:34
Цитата Сообщение от kmkdz_g Посмотреть сообщение
C++
1
2
3
4
5
X::X(char *s)  
str = new char[SIZE]; 
strcpy(str, s);
//...
}
Если размер строки s будет больше, чем SIZE? Или меньше?

Добавлено через 2 минуты
Цитата Сообщение от kmkdz_g Посмотреть сообщение
C++
1
2
3
4
5
6
7
void X::Set(char* s) {
    for (unsigned int i = 0; i<strlen(s); i++) {
 
        str[i] = s[i];
        str[i] = '\0';
    }
};
strcpy() кто-то отменил?
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 25
14.04.2017, 23:36  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Если размер строки s будет больше, чем SIZE? Или меньше?
если больше она обрезается до size
если меньше то она маленькая копируется
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
14.04.2017, 23:38
Цитата Сообщение от kmkdz_g Посмотреть сообщение
если больше она обрезается до size
Где и чем обрезается?
Цитата Сообщение от kmkdz_g Посмотреть сообщение
если меньше то она маленькая копируется
Зачем там тогда выделение лишней памяти?
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 25
14.04.2017, 23:39  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Зачем там тогда выделение лишней памяти?
не работает программа без этого выделения

Добавлено через 14 секунд
Цитата Сообщение от nd2 Посмотреть сообщение
Где и чем обрезается?
условие if перестает работать
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
14.04.2017, 23:44
Цитата Сообщение от kmkdz_g Посмотреть сообщение
не работает программа без этого выделения
Я про ЛИШНЮЮ память говорю, если:
Цитата Сообщение от nd2 Посмотреть сообщение
Или меньше?
Цитата Сообщение от nd2 Посмотреть сообщение
Зачем там тогда выделение лишней памяти?
Цитата Сообщение от kmkdz_g Посмотреть сообщение
условие if перестает работать
В упор не вижу никаких if. В какой строке кода?
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 25
14.04.2017, 23:46  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
В упор не вижу никаких if. В какой строке кода?
хорошо
после ввода строки делаем условие
C++
1
2
if(s>256)
{exit(1);}
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
14.04.2017, 23:53
Цитата Сообщение от kmkdz_g Посмотреть сообщение
хорошо
после ввода строки делаем условие
Почему здесь 256:
Цитата Сообщение от kmkdz_g Посмотреть сообщение
C++
1
char s[256];
А здесь 255:
Цитата Сообщение от kmkdz_g Посмотреть сообщение
C++
1
2
3
int SIZE=255;
//...
str = new char[SIZE];
?
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 25
15.04.2017, 00:06  [ТС]
Описка, везде 255 должно быть
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
15.04.2017, 00:12
Цитата Сообщение от kmkdz_g Посмотреть сообщение
Описка, везде 255 должно быть
Предлагаю SIZE использовать не как размер выделяемой памяти, а как размер строки (без '\0') объекта класса. Память выделять под размер конкретной строки (прочитанной в main() или строкового литерала).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.04.2017, 00:12

Перегрузка оператора присваивания
Доброго времени суток всем! Никак не могу правильно написать перегрузку оператора присваивания. При создании одного нового элемента...

Перегрузка оператора присваивания
При перегрузке оператора присвоения выдает ошибки cpp(58) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider...

Перегрузка оператора присваивания
Добрый вечер ! Нужна помощь по небольшому теоретико-практическому вопросу. Опять же вопрос по примеру из книги Шилдта С++ Базовый курс....

Перегрузка оператора присваивания
мне надо было реализовать конструкторы, деструктор, оператор присваивания, функции ввода / вывода объектов; кто сможет дописать...

Перегрузка оператора присваивания
Приветствую всех. Не могли бы подсказать как переопределить оператор присваивания. То что искал, так там написано в общем о...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru