Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Не работают перегруженные операторы - C++
проблема такова: есть перегруженный оператор &quot;=&quot;, при вызове которого выполняется присвоение значений массива, однако же, результат...

Перегруженные функции и операторы - C++
вопрос может быть тривиальный, но все же: как влияет количество вариантов перегруженных функций и операторов на скорости обработки? то...

Перегруженные логические операторы И, ИЛИ - C++
Учу по Шилдту плюсы. Дошел до перегрузки операторов. С некоторыми понятно, но вот некоторые вызывают проблемы. Напишите, пожалуйста,...

Перегруженные операторы - ошибка в коде - C++
Здравствуйте. Подскажите, пожалуйста, в чем ошибка. Нужно описать класс динамического массива и перегрузить операторы. С перегрузкой...

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

Классы. Перегруженные операторы ввода-вывода - C++
Есть класс book, который описывает 3 типа данных, то есть автор - char, название книги - char, год - int. Нужно использовать...

11
HighPredator
5634 / 1949 / 369
Регистрация: 10.12.2010
Сообщений: 5,650
Записей в блоге: 3
10.05.2012, 22:28 #2
Вы где это увидели?
0
besh]<a
13 / 11 / 1
Регистрация: 02.11.2009
Сообщений: 194
10.05.2012, 23:15  [ТС] #3
HighPredator, что именно?...
0
HighPredator
5634 / 1949 / 369
Регистрация: 10.12.2010
Сообщений: 5,650
Записей в блоге: 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;
}
0
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] // всн нормально
0
HighPredator
5634 / 1949 / 369
Регистрация: 10.12.2010
Сообщений: 5,650
Записей в блоге: 3
11.05.2012, 00:23 #6
besh]<a, вам известно, что такое указатель?
0
alex_x_x
бжни
2454 / 1659 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
11.05.2012, 00:34 #7
C++
1
2
3
obj *o=new obj();
obj& ob = *o;
ob[0];
0
besh]<a
13 / 11 / 1
Регистрация: 02.11.2009
Сообщений: 194
11.05.2012, 01:20  [ТС] #8
HighPredator, вообще то не совсем...
(*obj)[3] просто я в билдере не встречал такой записи
0
taras atavin
3887 / 1761 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
11.05.2012, 07:40 #9
Цитата Сообщение от besh
<a;3014506]Когда перегружается какой нибудь оператор, допустим квадратные скобки, то для использования оператора нужно писать такую конструкцию:
Бред. Она не зависит от перегрузки. Да и альтернативу имеет:
C++
1
*o->operator[](0);
.
0
besh]<a
13 / 11 / 1
Регистрация: 02.11.2009
Сообщений: 194
11.05.2012, 19:34  [ТС] #10
taras atavin, ну это уже явный вызов, зачем тогда вообще перегружать оператор?
Почему бред? У меня в билдере требуется такая запись...
0
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]
1
besh]<a
13 / 11 / 1
Регистрация: 02.11.2009
Сообщений: 194
12.05.2012, 21:55  [ТС] #12
modwind, спасибо именно это я хотел услышать. Я так и делал вначале, но это совсем ужасно...
0
12.05.2012, 21:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2012, 21:55
Привет! Вот еще темы с ответами:

Класс вектор с арифметическими операциями, перегруженные операторы - C++
Добрый день! Нужна помощь. Реализовываю класс вектор с арифметическими операторами с помощью контейнера &lt;vector&gt;. У меня имеются рабочие...

Какие методы и перегруженные операторы поддерживает std::set? - C++
Предназначение шаблонного класса.Какие методы и перегруженные операторы он поддерживает? Пример кода

Наследование, перегруженные операторы ввода-вывода, динамический массив - C++
Суть задания - создать базовый класс - worker, в котором будут поля - имя, фамилия, отчество. В нём же организовать перегрузку операторов...

Почему перегруженные операторы ввода/вывода нельзя сделать членами класса? - C++
Добрый вечер, Решаю домашнее задание, и вот вопрос возник. Создал класс и перегрузил ввода/вывод. Но не нашел информации почему...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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