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

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

Восстановить пароль Регистрация
 
besh]<a
 Аватар для besh]<a
12 / 10 / 1
Регистрация: 02.11.2009
Сообщений: 194
10.05.2012, 21:46     Указатели и перегруженные операторы #1
Когда перегружается какой нибудь оператор, допустим квадратные скобки, то для использования оператора нужно писать такую конструкцию:
C++
1
2
obj *o=new obj();
(*obj)[0];
можно ли как нибудь обойти это и написать obj[0];
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
 Аватар для HighPredator
5350 / 1733 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
10.05.2012, 22:28     Указатели и перегруженные операторы #2
Вы где это увидели?
besh]<a
 Аватар для besh]<a
12 / 10 / 1
Регистрация: 02.11.2009
Сообщений: 194
10.05.2012, 23:15  [ТС]     Указатели и перегруженные операторы #3
HighPredator, что именно?...
HighPredator
 Аватар для HighPredator
5350 / 1733 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 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
12 / 10 / 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
5350 / 1733 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 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
12 / 10 / 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
12 / 10 / 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     Указатели и перегруженные операторы
Еще ссылки по теме:

С++.Операторы в С++: условные операторы, операторы break и continue C++
Операторы языка С++: операторы цикла (исправьте программу) C++
C++ Перегруженные логические операторы И, ИЛИ

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

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

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