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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Genn55
372 / 219 / 41
Регистрация: 26.12.2012
Сообщений: 718
#1

Перегрузка операторов - C++

21.11.2013, 22:37. Просмотров 932. Ответов 20
Метки нет (Все метки)

Доброго всем времени суток!Пожалуйста помогите мне неучу разобраться.Пытаюсь разобраться с классами,но пока безуспешно без посторонней помощи не обойтись.Вот готовый пример перегрузки операторов ,но программа вылетает
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
#include <stdlib.h>
#include <iostream>
#include <cstring> 
 
using namespace std;
 //СОЗДАЕМ СОБСТВЕННЫЙ КЛАСС
class stroka
{
  public:
   stroka (char*); //конструктор класса принимающий один параметр
   void operator +(char*); //определение оператора +
   void operator -(char); //определение оператора -
   void show_stroka(void); //метод класса для отображения строки
  private:
   char data[256]; //символьный массив, доступный только классу
};
stroka::stroka(char *str) //Транзитом через конструктор
{
strcpy(data,str); //копируем в символьный массив класса данные из принимаемой извне строки
}
void stroka::operator +(char *str) //Определяем оператор +
{
strcat(data,str); //как функцию сложения двух строк
}
void stroka::operator -(char letter)//Определяем оператор -
{
char temp[256]; // будем создавать новую строку
int i,j; //счетчики циклов
//Проходим по всей строке класса с помощью цикла и если символ строки не равен принятому символу (параметру), то копируем его в новую строку
for (i=0,j=0;data[i];i++) if (data[i]!=letter) temp[j++]=data[i];
temp[j]=NULL;
strcpy(data,temp); //Копируем новую строку в символьный массив класса
}
void stroka::show_stroka(void)
{
cout<<data<<endl; //Показываем символьный массив класса
}
int main()
{
 
  char *st,*st2; //Объявление двух указателей для строк
  cin.get(st,256); //Считывание первой строки с клавиатуры
  cin.get(st2,256); //Считывание второй строки с клавиатуры
  stroka title(st); //Объявление переменной типа нашего класса и передача в конструктор первой строки
  title+" "; //С помощью перегрузки операторов добавили к строке пробел
  title+st2; //C помощью перегрузки операторов добавили к строке вторую строку
  title.show_stroka(); //Отобразили результирующую строку на экране
  title-'в'; //При помощи перегрузки операторов пытаемся удалить символ в
  title.show_stroka(); //Отобразили результирующую строку
 
  return 0;
}
Пробовал и другие примеры куча ошибок.Пожалуйста подскажите как правильно делать.Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2013, 22:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка операторов (C++):

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this - C++
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

Перегрузка операторов - C++
Доброго времени суток! Столкнулся с такой проблемой, перегрузка операторов. Имею работающий код, но не смог сделать по своему заданию. ...

Перегрузка операторов - C++
В общем задание следующее: Создайте класс chess (шахматы), в котором хранятся поля шахматной доски x, y (целые числа, лежащие в диапазоне...

Перегрузка операторов - C++
Решите пожалуйсто задачу: Разработайте программу, в которой реализована перегрузка оператора «^». Оператор «^» должен возводить...

[c++] Перегрузка операторов - C++
Не работает. #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #pragma argsused struct FazzyNumber { double x; double x1,x2; ...

C++ перегрузка операторов - C++
люди такая ситуация кто может в краце объясните перегрузку операторов мне например надо перегрузить оператор умножения что бы умножить...

20
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.11.2013, 11:32 #16
NULL обычно используется при работе с указателями (для наглядности), поэтому, в данном случае (строка), для наглядности лучше использовать '\0'.
1
Genn55
372 / 219 / 41
Регистрация: 26.12.2012
Сообщений: 718
22.11.2013, 11:41  [ТС] #17
Цитата Сообщение от gray_fox Посмотреть сообщение
Поменять в определении operator + тип параметра с char * на char const*.
появляются ошибки
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
22.11.2013, 11:45 #18
Цитата Сообщение от Genn55 Посмотреть сообщение
появляются ошибки
:/ http://ideone.com/z1ZNEm
1
Genn55
372 / 219 / 41
Регистрация: 26.12.2012
Сообщений: 718
22.11.2013, 11:58  [ТС] #19
char const* и const char* не одно и тоже?
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
22.11.2013, 12:00 #20
Цитата Сообщение от Genn55 Посмотреть сообщение
char const* и const char* не одно и тоже?
одно и то же
1
Genn55
372 / 219 / 41
Регистрация: 26.12.2012
Сообщений: 718
22.11.2013, 12:06  [ТС] #21
Увидел свою ошибку.Всем спасибо.Буду разбираться как работает код.
0
22.11.2013, 12:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2013, 12:06
Привет! Вот еще темы с ответами:

перегрузка операторов - C++
Всем привет. Дошел до темы перегрузки операторов и возникло два вопроса. Первый: Чем отличается вот этот код String ...

Перегрузка операторов - C++
В общем учу эту тему и ввожу код один в один как в уроке, но в уроке он компилится, а у меня нет. Ругается на &quot;c1++;&quot;, подскажите...

Перегрузка операторов - C++
Создайте класс Fraction (обыкновенная дробь), в котором реализовать перегрузку: оператора суммирования дробей, оператора суммирования дроби...

Перегрузка операторов ++ - C++
доброго времени суток. есть утечка памяти как я понимаю, но не мойму почему. о чем программа: есть обьект типа MString. В этом классе...


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Опции темы

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