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

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

14.04.2017, 21:11. Показов 4410. Ответов 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
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
14.04.2017, 21:17
Цитата Сообщение от kmkdz_g Посмотреть сообщение
мне главное понять правильно ли я перегрузил операцию присваивания
Неправильно, и не только это.
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 25
14.04.2017, 21:33  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Неправильно, и не только это
по перегрузке вроде разобрался
C++
1
2
3
4
5
6
7
8
9
String& String:: operator = (String& n) { 
int i = 0; 
s2 = new char[size]; 
n.s1 = s1; 
for (i = 0; i < strlen(n.s1); i++) 
s2[i] = n.s1[i]; 
s2[i] = '\0'; 
return *this; 
}
а что еще неправильно?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
14.04.2017, 21:41
Цитата Сообщение от kmkdz_g Посмотреть сообщение
по перегрузке вроде разобрался
Непохоже. Что за s1, s2?
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 25
14.04.2017, 21:59  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Непохоже. Что за s1, s2?
str str_return
не могли бы вы помочь? битый час пытаюсь разобраться, а не выходит ничего
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
14.04.2017, 22:20
Цитата Сообщение от kmkdz_g Посмотреть сообщение
str_return
Назначение str_return какое?
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 25
14.04.2017, 22:35  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Назначение str_return какое?
вторая строка которую возвращаем
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
14.04.2017, 22:37
Цитата Сообщение от kmkdz_g Посмотреть сообщение
вторая строка которую возвращаем
Зачем?
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 25
14.04.2017, 22:39  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Зачем?
вторая строка в которую мы запишем первую строку которая у нас была
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
14.04.2017, 22:44
Цитата Сообщение от kmkdz_g Посмотреть сообщение
вторая строка в которую мы запишем первую строку которая у нас была
Зачем?
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 25
14.04.2017, 22:45  [ТС]
по заданию так как я понял нужно
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
14.04.2017, 22:47
Цитата Сообщение от kmkdz_g Посмотреть сообщение
по заданию
Задание какое?
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 25
14.04.2017, 22:47  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Задание какое?
создать перегрузку =
Цитата Сообщение от kmkdz_g Посмотреть сообщение
Признак окончания ввода строки - нажатие клавиши "Ввод". Программа должна содержать перегруженную операцию «=», использование которой скопирует S1 в S2 .
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
14.04.2017, 22:49
Цитата Сообщение от kmkdz_g Посмотреть сообщение
создать перегрузку =
Это всё задание? А сам класс - это не задание? Прилагается к этому заданию?
Цитата Сообщение от kmkdz_g Посмотреть сообщение
Ввести с клавиатуры строку  символов . Признак окончания ввода строки - нажатие клавиши "Ввод". Программа должна содержать перегруженную операцию «=», использование которой скопирует S1 в S2 .
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 25
14.04.2017, 22:52  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
то всё задание? А сам класс - это не задание? Прилагается к заданию?
если быть точным то Длина L=10, то удаляются все A..Z;
и
Задание к работе
Общая постановка. Пользовательский класс String должен содержать необходимые элементы-данные, которые создаются в динамической области памяти.
Конструктор для создания строк: String (…);
Деструктор: ~String();
Метод ввода исходной строки: Set();
Метод печати: void print(…);
Код методов  – вне пространства определения класса. Программа иллюстрирует прямой и косвенный способы обращения к методам.
Ввести с клавиатуры строку  символов S1. Признак окончания ввода строки - нажатие клавиши "Ввод". Программа должна содержать перегруженную операцию «=», использование которой скопирует S1 в S2 .



весь код программы пишется самостоятельно



примечательно то,что с
C++
1
2
3
4
5
6
7
8
X& operator=(X & obj) { 
 
    strcpy(str, obj.get());
    return *this; 
} 
char* get(){
    return str;
};
все работает как часы
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
14.04.2017, 22:57
И как, из этого задания, следует наличие в классе какой-то str_return ?
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 25
14.04.2017, 22:59  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
И как, из этого задания, следует наличие в классе какой-то str_return ?
название переменной, я мог назвать str1 str2 но назвал ретёрн потому что читать проще
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
14.04.2017, 23:17
Цитата Сообщение от kmkdz_g Посмотреть сообщение
название переменной, я мог назвать str1 str2 но назвал ретёрн потому что читать проще
Ты никак не поймёшь, о чём я спрашиваю. Вот это:
Цитата Сообщение от kmkdz_g Посмотреть сообщение
Программа должна содержать перегруженную операцию «=», использование которой скопирует S1 в S2
подразумевает создание двух объектов твоего класса: S1 и S2, и присваивание одного другому, а не наличие какй-то ещё строки в классе (str_return).
0
0 / 0 / 1
Регистрация: 16.11.2016
Сообщений: 25
14.04.2017, 23:21  [ТС]
верно. я вас неправильно понял.
в main создаю объекты класса
X s1,s2;
с помощью перегрузки в изначальном варианте
C++
1
2
3
4
5
6
7
8
X& operator=(X & obj) { 
 
    strcpy(str, obj.get());
    return *this; 
} 
char* get(){
    return str;
};
присваиваю
C++
1
2
s1=s2;
print(s2);//вывожу
с помощью второй перегрузки программа крашится
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
14.04.2017, 23:23
Цитата Сообщение от kmkdz_g Посмотреть сообщение
print(s2);//вывожу
s1 нужно выводить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.04.2017, 23:23
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru