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

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

Восстановить пароль Регистрация
 
Nikropolb
 Аватар для Nikropolb
48 / 48 / 10
Регистрация: 25.06.2012
Сообщений: 254
Записей в блоге: 1
30.05.2013, 20:05     Перегрузка ~ #1
Все привет.
Есть класс в котором перегружен оператор тильда,он должен возвращать значение переменной класса.

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++ C++ Перегрузка
C++ Перегрузка << и >>
Перегрузка в c++ C++
C++ перегрузка []
Перегрузка () C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.05.2013, 20:07     Перегрузка ~ #2
C++
1
2
s t;
~t;
Nikropolb
 Аватар для Nikropolb
48 / 48 / 10
Регистрация: 25.06.2012
Сообщений: 254
Записей в блоге: 1
30.05.2013, 20:11  [ТС]     Перегрузка ~ #3
мне нужно с указателем.
zer0mail
2190 / 1873 / 187
Регистрация: 03.07.2012
Сообщений: 6,669
Записей в блоге: 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
 Аватар для Nikropolb
48 / 48 / 10
Регистрация: 25.06.2012
Сообщений: 254
Записей в блоге: 1
30.05.2013, 20:24  [ТС]     Перегрузка ~ #6
Спасибо
Федя Форточкин
 Аватар для Федя Форточкин
66 / 80 / 16
Регистрация: 09.12.2012
Сообщений: 222
Записей в блоге: 3
30.05.2013, 20:27     Перегрузка ~ #7
zer0mail, если указатель будет объявлен как у него. то компилятор будет ругаться что указатель должен на что-то ссылаться
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11850 / 6829 / 773
Регистрация: 27.09.2012
Сообщений: 16,931
Записей в блоге: 2
Завершенные тесты: 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;
}
агерон
 Аватар для агерон
265 / 264 / 33
Регистрация: 12.10.2009
Сообщений: 1,032
30.05.2013, 20:57     Перегрузка ~ #9
знак тильда используеться как признак деструктора класса, мое личное мнение перегружать знак тильда глупость
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
30.05.2013, 21:03     Перегрузка ~ #10
Цитата Сообщение от агерон Посмотреть сообщение
знак тильда используеться как признак деструктора класса, мое личное мнение перегружать знак тильда глупость
Ничего общего между перегруженной тильдой и деструктором нет.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11850 / 6829 / 773
Регистрация: 27.09.2012
Сообщений: 16,931
Записей в блоге: 2
Завершенные тесты: 1
30.05.2013, 21:04     Перегрузка ~ #11
Цитата Сообщение от агерон Посмотреть сообщение
как признак деструктора класса
только не стоит путать
obj.~obj()
и ~obj
агерон
 Аватар для агерон
265 / 264 / 33
Регистрация: 12.10.2009
Сообщений: 1,032
31.05.2013, 01:12     Перегрузка ~ #12
в том то и смысл что может оператор ~ в С++ и существует но вот осмысленной операции для классов с ним я что не припомню. Но есть 1 не оспоримый факт который сидит в голове через ~ определяеться деструктор и точка. А значит если преопределить ~ то это внесет путанцу при чтении и восприятии кода... а это знаете черевато... так что повторю еще раз переопределение ~ есть зло ибо оно рвет поток восприятия
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11850 / 6829 / 773
Регистрация: 27.09.2012
Сообщений: 16,931
Записей в блоге: 2
Завершенные тесты: 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
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
31.05.2013, 02:41     Перегрузка ~ #14
Цитата Сообщение от агерон Посмотреть сообщение
в том то и смысл что может оператор ~ в С++ и существует но вот осмысленной операции для классов с ним я что не припомню.
Безопасные перечисления, например. Там его вполне имеет смысл перегружать вместе со всей остальной когортой логических операций.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4928 / 2671 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
31.05.2013, 02:48     Перегрузка ~ #15
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Безопасные перечисления, например.
попродробнее, пожалуйста.

Перегружать ~ для абы чего, не зная как работает это "чего" - говнокод, т.к. для человека разбирающегося результат может оказаться вполне неочевиден.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2013, 03:50     Перегрузка ~
Еще ссылки по теме:

перегрузка -- C++
Перегрузка >> C++
C++ Перегрузка ++ и --

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

Или воспользуйтесь поиском по форуму:
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
31.05.2013, 03:50     Перегрузка ~ #16
MrGluck, примерно как то так:
C++
1
2
3
4
5
6
7
8
9
enum MyEnum {
   FIRST,
   SECOND,
   THIRD
};
 
constexpr MyEnum  operator~( const MyEnum obj ) {
   return static_cast< MyEnum >( ~static_cast< int >( obj ));
}
Yandex
Объявления
31.05.2013, 03:50     Перегрузка ~
Ответ Создать тему
Опции темы

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