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

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

Войти
Регистрация
Восстановить пароль
 
 
Nikropolb
54 / 54 / 11
Регистрация: 25.06.2012
Сообщений: 276
Записей в блоге: 1
#1

Перегрузка ~ - C++

30.05.2013, 20:05. Просмотров 689. Ответов 15
Метки нет (Все метки)

Все привет.
Есть класс в котором перегружен оператор тильда,он должен возвращать значение переменной класса.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class s
{
private: int a;
 
public: s():a(3);
          void operator~() { cout << a << endl; }
};
 
int main()
{
   s *t;
   
   ~t; //НЕ СРАБОТАЕТ! А КАК СДЕЛАТЬ ТАК ЧТО БЫ СРАБОТАЛО?.
 
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2013, 20:05     Перегрузка ~
Посмотрите здесь:

Перегрузка * - C++
Есть такой класс: class CMatrix{ valarray&lt;valarray&lt;double&gt; &gt; matrix; public: CMatrix operator* (const CMatrix &amp;M); }; ...

перегрузка [] - C++
Как перегрузить operator так, чтобы когда я модифицировал массив то вызывалась простая версия, а когда просто выводил то const версия? ...

Перегрузка + - C++
#include &lt;iostream&gt; using namespace std; class loc { int n , m; public: loc() {} loc( int lg , lt) { n = lg; m =...

Перегрузка new - C++
Дайте примеры на перегрузку. #define n ... // Некая целая константа class a { ... }; // Некий класс a *p=new a; // Здесь должен быть...

Перегрузка - C++
Дали задачу, на перегрузку строк вот один из операторов который надо перегрузить. stringg&amp; operator+=( stringg a) { char...

Перегрузка в c++ - C++
Зачем нужно использовать перегрузку в c++? Этот вопрос будет у меня на экзамене, поэтому хочу услышать ваши версии

Перегрузка ++ и -- - C++
У меня было задание: Напишите программу работы со временем, в которой используются перегруженные операции ++ и --, которые работают в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.05.2013, 20:07     Перегрузка ~ #2
C++
1
2
s t;
~t;
Nikropolb
54 / 54 / 11
Регистрация: 25.06.2012
Сообщений: 276
Записей в блоге: 1
30.05.2013, 20:11  [ТС]     Перегрузка ~ #3
мне нужно с указателем.
zer0mail
2330 / 1956 / 192
Регистрация: 03.07.2012
Сообщений: 7,013
Записей в блоге: 1
30.05.2013, 20:17     Перегрузка ~ #4
А так: ~(*t)
Федя Форточкин
66 / 80 / 16
Регистрация: 09.12.2012
Сообщений: 222
Записей в блоге: 3
30.05.2013, 20:24     Перегрузка ~ #5
Nikropolb, вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
class s
{
private: int a;
 
public: s():a(3){};
          void operator~() { cout << a << endl; }
};
 
int main()
{
    s *a = new s();
    ~*a; 
    delete a;
    return 0;
}
Nikropolb
54 / 54 / 11
Регистрация: 25.06.2012
Сообщений: 276
Записей в блоге: 1
30.05.2013, 20:24  [ТС]     Перегрузка ~ #6
Спасибо
Федя Форточкин
66 / 80 / 16
Регистрация: 09.12.2012
Сообщений: 222
Записей в блоге: 3
30.05.2013, 20:27     Перегрузка ~ #7
zer0mail, если указатель будет объявлен как у него. то компилятор будет ругаться что указатель должен на что-то ссылаться
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,066
Записей в блоге: 3
Завершенные тесты: 1
30.05.2013, 20:38     Перегрузка ~ #8
Цитата Сообщение от Nikropolb Посмотреть сообщение
мне нужно с указателем.
указатель - это базовый тип

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
class s{
private: int a;
 
public: s():a(3){}
          void operator~() { cout << a << endl; }
};
 
int main(){
    s *t=new s;   
    ~(*t);
    delete t;
    return 0;
}
агерон
268 / 267 / 33
Регистрация: 12.10.2009
Сообщений: 1,057
30.05.2013, 20:57     Перегрузка ~ #9
знак тильда используеться как признак деструктора класса, мое личное мнение перегружать знак тильда глупость
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
30.05.2013, 21:03     Перегрузка ~ #10
Цитата Сообщение от агерон Посмотреть сообщение
знак тильда используеться как признак деструктора класса, мое личное мнение перегружать знак тильда глупость
Ничего общего между перегруженной тильдой и деструктором нет.
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,066
Записей в блоге: 3
Завершенные тесты: 1
30.05.2013, 21:04     Перегрузка ~ #11
Цитата Сообщение от агерон Посмотреть сообщение
как признак деструктора класса
только не стоит путать
obj.~obj()
и ~obj
агерон
268 / 267 / 33
Регистрация: 12.10.2009
Сообщений: 1,057
31.05.2013, 01:12     Перегрузка ~ #12
в том то и смысл что может оператор ~ в С++ и существует но вот осмысленной операции для классов с ним я что не припомню. Но есть 1 не оспоримый факт который сидит в голове через ~ определяеться деструктор и точка. А значит если преопределить ~ то это внесет путанцу при чтении и восприятии кода... а это знаете черевато... так что повторю еще раз переопределение ~ есть зло ибо оно рвет поток восприятия
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,066
Записей в блоге: 3
Завершенные тесты: 1
31.05.2013, 02:19     Перегрузка ~ #13
Цитата Сообщение от агерон Посмотреть сообщение
но вот осмысленной операции для классов с ним я что не припомню.
а если у меня bitset аналог или длинная арифметика с перегруженными поразрядными операторами?

Цитата Сообщение от агерон Посмотреть сообщение
А значит если преопределить ~ то это внесет путанцу при чтении и восприятии кода...
ИМХО, это Вы бред написали


Даже так не вижу как можно перепутать
C++
1
2
3
4
5
6
7
#include <bitset>
#include <iostream>
 
int main(){
    std::bitset<8> bs;  
    std::cout<<(bs.set(3,10),std::cout<<bs<<std::endl,(bs=~bs))<<std::endl;
}
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
31.05.2013, 02:41     Перегрузка ~ #14
Цитата Сообщение от агерон Посмотреть сообщение
в том то и смысл что может оператор ~ в С++ и существует но вот осмысленной операции для классов с ним я что не припомню.
Безопасные перечисления, например. Там его вполне имеет смысл перегружать вместе со всей остальной когортой логических операций.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2013, 02:48     Перегрузка ~
Еще ссылки по теме:

Перегрузка - C++
Класс - множество set. Дополнительно перегрузить следующие операции: -- удалить элемент из множества (типа set-item); * - пересечение...

Перегрузка [][] - C++
Возможно ли для данного класса обеспечить перегрузку жвойных скобок с тем, чтобы в программе можно было использовать выражения типа: ...

перегрузка [] - C++
доброго времени суток.. суть задачи такова: есть класс матриц, матрица хранится в виде одномерного массива.. я перегрузил &lt;&lt; и += ...

Перегрузка - C++
Написать программу на языке C++, реализующию перегруженную функцию z_cnt, получа- ющую в качестве аргумента или массив целых чисел, или...

перегрузка [] - C++
Здравствуйте! код из учебного пособия. (возможно немного не рабочий) текст перед кодом- &quot;Пусть класс определен как строка символов....


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

Или воспользуйтесь поиском по форуму:
MrGluck
Модератор
Эксперт CЭксперт С++
7178 / 4344 / 634
Регистрация: 29.11.2010
Сообщений: 11,822
31.05.2013, 02:48     Перегрузка ~ #15
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Безопасные перечисления, например.
попродробнее, пожалуйста.

Перегружать ~ для абы чего, не зная как работает это "чего" - говнокод, т.к. для человека разбирающегося результат может оказаться вполне неочевиден.
Yandex
Объявления
31.05.2013, 02:48     Перегрузка ~
Ответ Создать тему
Опции темы

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