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

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

Войти
Регистрация
Восстановить пароль
 
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

Указатель owner - C++

16.02.2012, 21:31. Просмотров 785. Ответов 3
Метки нет (Все метки)

Указатель this мне известен, но он указывает на сам объект, а мне надо на композит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
class A
{
 class B
 {
 };
 B b1;
 B b2;
 ...
};
A a1;
A a2;
A *array;
Надо, чтоб B имел член
C++
1
A * owner;
, или
C++
1
A * owner();
. Причём,
C++
1
a1.b1.owner
и
C++
1
a1.b2.owner
должны указывать на
C++
1
a1
, а
C++
1
a2.b1.owner
и
C++
1
a2.b2.owner
- на
C++
1
a2
. И все
C++
1
array[i].b1.owner
и
C++
1
array[i].b2.owner
должны указывать на свои
C++
1
array[i]
. Желательно, чтоб они ещё и выдерживали
C++
1
realloc
. Как это сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2012, 21:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатель owner (C++):

Как получить ссылку на указатель или указатель на указатель в массиве? - C++
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...

Функция, получающая указатель на обычную функцию, получает указатель на метод класса - C++
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая принимает указатель на функцию и...

Функция, принимающая указатель и число байт и выделяющая память под указатель - C++
Здравствуйте. Задача легкая, но почему-то завис Нужно написать функцию, принимающую указатель и число байт и выделяющую память под...

Как правильно удалять выделенную память под указатель на указатель? - C++
есть код #include <iostream> #include <conio.h> #include <stdlib.h> #include <time.h> using namespace std; void sort_1(const...

Реализация двоичных деревьев поиска: Зачем в параметрах функции используется указатель на указатель - C++
Всем привет, встретил в книге такой пример добавления узла в дерево: typedef struct tree { int data; tree *left, *right,...

Передача умного указателя в функцию принимающую указатель на указатель - C++
Итак имеется функция со следующим параметром: HRESULT __stdcall Function(SomeClass **param); В случае, когда создаём обычный...

3
NoMasters
Псевдослучайный
1762 / 1105 / 73
Регистрация: 13.09.2011
Сообщений: 3,141
16.02.2012, 21:49 #2
Пиши этот указатель в конструкторе.
Цитата Сообщение от taras atavin Посмотреть сообщение
realloc
По определению не вызывает конструкторы/деструкторы.
0
OstapBender
583 / 522 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
16.02.2012, 21:53 #3
сделай конструктор B(A* owner) и передавай туда указатель this
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.02.2012, 09:54  [ТС] #4
Цитата Сообщение от NoMasters Посмотреть сообщение
По определению не вызывает конструкторы/деструкторы.
То есть перемещение композита он не выдержит?

Добавлено через 14 минут
Цитата Сообщение от OstapBender Посмотреть сообщение
сделай конструктор B(A* owner) и передавай туда указатель this
А как? Это обычные поля, у них нет static и они не выделяются по указателям.

Добавлено через 6 минут
Цитата Сообщение от NoMasters Посмотреть сообщение
По определению не вызывает конструкторы/деструкторы.
А ты обратил внимание на
Цитата Сообщение от taras atavin Посмотреть сообщение
или
C++
1
A * owner();
? b1 и b2 имеют фиксированные смещения от A::this. Но тогда и owner имеет постоянное для каждого объекта смещение от B::this. Предположим,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class B
{
 int OwnerOffset;
 B (A *owner)
 {
  OwnerOffset=((void *)this)-owner;
 }
 A * owner()
 {
  return (A *)(((void *)this)-OwnerOffset);
 }
 ...
};
Вроде должно выдержать любые перемещения композита.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2012, 09:54
Привет! Вот еще темы с ответами:

Объяснить работу функции, возвращающей указатель на указатель на char - C++
Добрый день! Сможете объяснить что означает запись char **InputFile(int &strings);? Почему именно двойное **? Буду очень благодарна...

Функция принимает указатель на void и возвращает указатель на int - C++
Запишите прототип функции, которая принимает указатель на void и возвращает указатель на int.

Приведение любого двумерного массива к типу указатель на указатель - C++
Допустим, есть несколько массивов int arr1; int arr2; int arr3; Какое преобразование нужно сделать, чтобы подобные присвоения...

Указатель на указатель, функции для создания новых массивов? - C++
Всем привет! У меня в коде есть несколько новых массивов, чтобы не повторяться я создам функцию которая будет выделять память под новые...


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

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

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