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

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

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

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

03.06.2013, 22:04. Просмотров 368. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2013, 22:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка операторов (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++
люди такая ситуация кто может в краце объясните перегрузку операторов мне например надо перегрузить оператор умножения что бы умножить...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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,ну я понимаю ,что с помощью перегрузки операторов определяю новые операции,но вы могли бы мне привести пример применения этого оператора,показывающее его необходимость...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2013, 22:44
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.06.2013, 22:44
Ответ Создать тему
Опции темы

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