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

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

Войти
Регистрация
Восстановить пароль
 
Sentipar
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 26
#1

Указатели - C++

29.03.2014, 20:40. Просмотров 197. Ответов 7
Метки нет (Все метки)

Уважаемые форумчане, столкнулся с элементарной проблемой, но не могу понять как решить. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template<class T> struct S {
public:
    S(T t): val(t), elem(&t) {}
 
    T& get();
    T& set(T& n_v); // set new value (n_v) to the object S<T>;
    T* test() { return this->*elem;}
 
    T& operator[] (int n) { return elem[n]; }
private:
    T* elem;
    T val;
};
Проблема в том, что я не могу понять, почему при разыменовании с помощь вот этой функции
C++
1
T* test() { return this->*elem;}
мне возвращается адрес объекта, с которого вызывалась, а не разыменованное значение.
Заранее спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2014, 20:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатели (C++):

Указатели и указатели на указатели, а также типы данных - C++
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

Через указатели на указатели посчитать сумму двух чисел и записать в третье - C++
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной - C++
Мой код. #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include&lt;iomanip&gt; using namespace std; void min_max(int*pa, int*pb,...

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов? - C++
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;// выделил для первой строки матрицы два...

Отсортировать массив и вывести на экран (массивы и указатели на указатели) - C++
Даны массивы F-фамилий студентов и S-результаты сессии (5 оценок) , причем s- результат сессии F студента. Отсортировать массив S по...

Указатели на слонов или А зачем нужны указатели? - C++
Знаю что таких вопросов было уйма, но я так и не нашел ответа на свой вопрос. Для чего нужны указатели? Что такое указатели я знаю, это...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryS
Модератор
6633 / 5040 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
29.03.2014, 20:41 #2
Цитата Сообщение от Sentipar Посмотреть сообщение
мне возвращается адрес объекта, с которого вызывалась.
а слово this что означает?
0
Георгий Фирсов
5 / 5 / 0
Регистрация: 05.11.2012
Сообщений: 62
29.03.2014, 20:46 #3
Пробуй так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template<class T> struct S {
public:
    S(T t): val(t), elem(&t) {}
 
    T& get();
    T& set(T& n_v); // set new value (n_v) to the object S<T>;
    T test() { return this->*elem;}
 
    T& operator[] (int n) { return elem[n]; }
private:
    T* elem;
    T val;
};
0
Sentipar
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 26
29.03.2014, 20:54  [ТС] #4
Добавлено через 1 минуту
Насколько я знаю, указатель на член объекта, с которого производился вызов функции (хотя там и без него можно написать, всё равно результат тот же)

Добавлено через 2 минуты
Не работает, так пробовал уже.
0
Георгий Фирсов
5 / 5 / 0
Регистрация: 05.11.2012
Сообщений: 62
29.03.2014, 21:02 #5
Кстати я сразу не заметил - у вас используется оператор
C++
1
->* // Да да и такой есть
Может поэтому и выдает неправильный результат
Можно попробовать
C++
1
T test() { return *elem;}
И вместо структуры использовать класс
0
Sentipar
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 26
29.03.2014, 21:18  [ТС] #6
Хм, к этому я ещё не дошёл походу дела, но предполагалось что возвращаться будет разыменованный указатель.
Тогда какой код вместо этого написать?

Добавлено через 9 минут
К сожалению, это ничего не меняет. Очевидно где-то допустил ошибку, буду искать.

Добавлено через 3 минуты
Нашел.
C++
1
S(T t): val(t), elem(&val) {}
Очевидно, ссылаться нужно на данную-член самого объекта.
0
ValeryS
Модератор
6633 / 5040 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
29.03.2014, 21:29 #7
Цитата Сообщение от Sentipar Посмотреть сообщение
Насколько я знаю, указатель на член объекта, с которого производился вызов функции
почти
текущий объект, точнее указатель на текущий объект
тогда я не понимаю твой вопрос
Цитата Сообщение от Sentipar Посмотреть сообщение
мне возвращается адрес объекта, с которого вызывалась,
объясни по подробней
и пример как используешь класс что он выдает и что ожидаешь
1
Sentipar
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 26
29.03.2014, 21:51  [ТС] #8
Я уже решил проблему, но всё равно, спасибо, что напомнили об операторе this.
Проблема была в том, что я неправильно использовал оператор ->* (не зная при этом, что он делает), и ещё - ссылаться надо было на член самого объекта:
C++
1
S(T t): val(t), elem(&val) {}
К счастью, я уже разобрался. Спасибо за помощь.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2014, 21:51
Привет! Вот еще темы с ответами:

Написать программу сортировки через указатели на указатели - C++
Вот моя программа #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; //Сортировка &quot;пузырьком&quot;. ...

Используются ли на практике указатели на указатели объектов? - C++
Имеются ввиду указатели именно на объекты, а не динамические массивы. Например такой: Object** obj; А как насчёт такого: Object***...

Указатели на массивы. Указатели и функции - C++
Вот задача: Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать: -Элементы обоих массивов; -Общие...

Указатели и массивы. Указатели и функции - C++
Никак не разберусь с указателями на функцию. Пишу в Visual Studio. Надо написать функцию Compress() с использованием указателей, которая...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.03.2014, 21:51
Ответ Создать тему
Опции темы

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