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

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

Войти
Регистрация
Восстановить пароль
 
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
#1

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

03.06.2013, 22:04. Просмотров 379. Ответов 4
Метки нет (Все метки)

Вообщем в чём дело смысл перегрузки операторов ясен,зачем применять тоже ясно,как организуется понятно,перегрузка унарных операторов понятно,но вот применение перегрузки операторов для создания новых типов данных как-то не доходит,вот например хочу организовать нахождение подстроки до первого пробела,с помощью оператора "=";
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
#include "stdafx.h"
#include <iostream>
#include <cstring>
 
using namespace std;
 
class strig {
    char *str;
    int len;
public : 
    strig (char *s = "") {str = new char [100];strcpy (str,s);len = strlen (str);; }
    ~strig () {delete [] str; }
 
    strig operator= (strig ob2);
 
    void Print () {cout<<"Наша строка: "<<str<<endl;}
};
 
strig strig::operator= (strig ob2)
{
    for (int i = 0;i<len;i++)
    {
        if (str[i] = ' ')
        {
            strcpy (str,ob2.str);
            break;
        }
    }
    
    return *this;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (LC_ALL,"Russian");
 
    strig a ("Мама ела кашу");
 
    a.Print ();
    a = "asdf dsf dfg";
    a.Print ();
 
    system ("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2013, 22:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка операторов (C++):

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

перегрузка операторов - C++
на примере класса Line не получается правильно и без ошибок перегрузить следующие операторы ==, &lt;, !=, &lt;&lt;. с = и вроде справился, с...

Перегрузка операторов - C++
Здравствуйте. Помогите пожалуйста. Может кто то помочь разобраться с перегрузкой операторов. Мне бы простенький рабочий пример не помешал...

Перегрузка операторов - C++
Я новичек в С++, столкнулась с перегрузкой операторов. Подскажите пожалуйста в чем принципиальное отличие таких обьявлений: Имя_класса&amp;...

Перегрузка операторов - C++
Доброго всем времени суток!Пожалуйста помогите мне неучу разобраться.Пытаюсь разобраться с классами,но пока безуспешно без посторонней...

перегрузка операторов - C++
Имеется такая программа: class reversion { vector&lt;int&gt; mass1; vector&lt;int&gt; mass2; vector&lt;int&gt; rev1; vector&lt;int&gt; rev2; ...

4
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
03.06.2013, 22:12 #2
C++
1
strcpy (str,ob2.str);
Может и не хватить 100 символов. Лучше в operator= тоже new сделайте символов на 200, чтобы хватило на 2 полных строки, которые без пробелов

Добавлено через 1 минуту
И вообще, new лучше делать так
C++
1
str = new char [strlen(s)+1];
0
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
03.06.2013, 22:25  [ТС] #3
ViktorKozlov, ну это я видел и сам применяю,но суть моей проблемы это не решило,можно и свой пример привести,но желательно создать что нибудь свою перегруженным оператором
0
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
03.06.2013, 22:36 #4
faLek,
перегруженные операторы нужны для того, чтобы объектами пользовательского типа можно было оперировать так же, как и базовыми типами, т.е. можно было писать с этими объектами +, -, *, /, = и т.д. Никаких новых типов эти операторы не создают.
Существует оператор преобразования, который вызывается, когда происходит преобразование к конкретному типу. Например, здесь вызовется operator int()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
class CLASS1
{
public:
    operator int()
    {
        return 5;
    }
};
 
void main()
{
    CLASS1 cl1;
    std::cout<<(int)cl1<<'\n';
}
Но опять же, это не создание нового типа, а приведение к уже существующему
0
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
03.06.2013, 22:44  [ТС] #5
ViktorKozlov,ну я понимаю ,что с помощью перегрузки операторов определяю новые операции,но вы могли бы мне привести пример применения этого оператора,показывающее его необходимость...
0
03.06.2013, 22:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2013, 22:44
Привет! Вот еще темы с ответами:

Перегрузка операторов >>, << - C++
Помогите перегрузить операторы ввода и вывода в классе Time. (Я совсем-совсем новичек...)Заранее всем спасибо.class Time { friend...

[c++] Перегрузка операторов - C++
Для заданных A = (A – a1, A, A + a2) и B = (B – b1, B, B + b2) Найти сумму A + B = (A + B – a1 – b1, A + B, A + B + a2 + b2); ...

Перегрузка операторов - C++
Вот задание b) Создать класс Set – множество целых чисел, используя динамическую память. Определить операторы работы с множествами: &quot;+&quot; –...

Перегрузка операторов С++ - C++
Задание: Написать код на языке С++ где реализуется перегрузка операторов. Тематика: База данных института(студенты, аспиранты,...


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

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

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