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

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

Войти
Регистрация
Восстановить пароль
 
besh]<a
 Аватар для besh]<a
13 / 11 / 1
Регистрация: 02.11.2009
Сообщений: 194
#1

Указатели и перегруженные операторы - C++

10.05.2012, 21:46. Просмотров 700. Ответов 11
Метки нет (Все метки)

Когда перегружается какой нибудь оператор, допустим квадратные скобки, то для использования оператора нужно писать такую конструкцию:
C++
1
2
obj *o=new obj();
(*obj)[0];
можно ли как нибудь обойти это и написать obj[0];
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2012, 21:46     Указатели и перегруженные операторы
Посмотрите здесь:

не работают перегруженные операторы C++
Операторы отношений и логические операторы C++
C++ Поразрядные операторы,операторы сдвига
C++ перегруженные функции и операторы
Перегруженные потоковые операторы при наследовании C++
Класс вектор с арифметическими операциями, перегруженные операторы C++
C++ Перегруженные логические операторы И, ИЛИ
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
 Аватар для HighPredator
5413 / 1796 / 327
Регистрация: 10.12.2010
Сообщений: 5,297
Записей в блоге: 3
10.05.2012, 22:28     Указатели и перегруженные операторы #2
Вы где это увидели?
besh]<a
 Аватар для besh]<a
13 / 11 / 1
Регистрация: 02.11.2009
Сообщений: 194
10.05.2012, 23:15  [ТС]     Указатели и перегруженные операторы #3
HighPredator, что именно?...
HighPredator
 Аватар для HighPredator
5413 / 1796 / 327
Регистрация: 10.12.2010
Сообщений: 5,297
Записей в блоге: 3
10.05.2012, 23:33     Указатели и перегруженные операторы #4
Во-первых, в вашем коде obj это тип данных, поэтому строка 3 превращается в большой вопрос. Во-вторых, перегрузка операторов придумана для того, чтобы не изголяться при вызове. Покажу на примере:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class A
{
private:
  int *Array;
public:
  int &operator[](int I);
};
 
//перегрузили оператор
int &A::operator[](int I)
{
  return Array[I];
}
 
int main()
{
  A obj;
  //...
  int k=obj[3];//нормальный вызов
  return 0;
}
besh]<a
 Аватар для besh]<a
13 / 11 / 1
Регистрация: 02.11.2009
Сообщений: 194
11.05.2012, 00:14  [ТС]     Указатели и перегруженные операторы #5
HighPredator,
попробуйте теперь так

C++
1
2
3
A *obj = new A();
obj[3] // не получиться
(*obj)[3] // всн нормально
HighPredator
 Аватар для HighPredator
5413 / 1796 / 327
Регистрация: 10.12.2010
Сообщений: 5,297
Записей в блоге: 3
11.05.2012, 00:23     Указатели и перегруженные операторы #6
besh]<a, вам известно, что такое указатель?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
11.05.2012, 00:34     Указатели и перегруженные операторы #7
C++
1
2
3
obj *o=new obj();
obj& ob = *o;
ob[0];
besh]<a
 Аватар для besh]<a
13 / 11 / 1
Регистрация: 02.11.2009
Сообщений: 194
11.05.2012, 01:20  [ТС]     Указатели и перегруженные операторы #8
HighPredator, вообще то не совсем...
(*obj)[3] просто я в билдере не встречал такой записи
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.05.2012, 07:40     Указатели и перегруженные операторы #9
Цитата Сообщение от besh
<a;3014506]Когда перегружается какой нибудь оператор, допустим квадратные скобки, то для использования оператора нужно писать такую конструкцию:
Бред. Она не зависит от перегрузки. Да и альтернативу имеет:
C++
1
*o->operator[](0);
.
besh]<a
 Аватар для besh]<a
13 / 11 / 1
Регистрация: 02.11.2009
Сообщений: 194
11.05.2012, 19:34  [ТС]     Указатели и перегруженные операторы #10
taras atavin, ну это уже явный вызов, зачем тогда вообще перегружать оператор?
Почему бред? У меня в билдере требуется такая запись...
modwind
 Аватар для modwind
52 / 52 / 1
Регистрация: 09.03.2012
Сообщений: 101
11.05.2012, 19:48     Указатели и перегруженные операторы #11
можно ли как нибудь обойти это и написать obj[0];
Нельзя. Не понимаю, зачем это нужно. Запись (*obj)[0] и так достаточно короткая.
Если позволить писать obj[0], из контекста не будет понятен тип переменной obj (то, что это указатель).
И вообще, для указателей [0] означает обратиться к первому элементу массива.
Попробуй obj[0][0]
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2012, 21:55     Указатели и перегруженные операторы
Еще ссылки по теме:

C++ Классы. Перегруженные операторы ввода-вывода
C++ Почему перегруженные операторы ввода/вывода нельзя сделать членами класса?
Наследование, перегруженные операторы ввода-вывода, динамический массив C++
C++ Какие методы и перегруженные операторы поддерживает std::set?
Перегруженные функции C++

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

Или воспользуйтесь поиском по форуму:
besh]<a
 Аватар для besh]<a
13 / 11 / 1
Регистрация: 02.11.2009
Сообщений: 194
12.05.2012, 21:55  [ТС]     Указатели и перегруженные операторы #12
modwind, спасибо именно это я хотел услышать. Я так и делал вначале, но это совсем ужасно...
Yandex
Объявления
12.05.2012, 21:55     Указатели и перегруженные операторы
Ответ Создать тему
Опции темы

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