Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
03.06.2013, 22:04     Перегрузка операторов #1
Вообщем в чём дело смысл перегрузки операторов ясен,зачем применять тоже ясно,как организуется понятно,перегрузка унарных операторов понятно,но вот применение перегрузки операторов для создания новых типов данных как-то не доходит,вот например хочу организовать нахождение подстроки до первого пробела,с помощью оператора "=";
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2013, 22:04     Перегрузка операторов
Посмотрите здесь:

Перегрузка операторов. C++
C++ Перегрузка операторов(=,+)
C++ Перегрузка операторов С++
C++ перегрузка операторов
C++ Перегрузка операторов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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];
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
03.06.2013, 22:25  [ТС]     Перегрузка операторов #3
ViktorKozlov, ну это я видел и сам применяю,но суть моей проблемы это не решило,можно и свой пример привести,но желательно создать что нибудь свою перегруженным оператором
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';
}
Но опять же, это не создание нового типа, а приведение к уже существующему
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
03.06.2013, 22:44  [ТС]     Перегрузка операторов #5
ViktorKozlov,ну я понимаю ,что с помощью перегрузки операторов определяю новые операции,но вы могли бы мне привести пример применения этого оператора,показывающее его необходимость...
Yandex
Объявления
03.06.2013, 22:44     Перегрузка операторов
Ответ Создать тему
Опции темы

Текущее время: 20:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru