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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
#1

Порядок инициализации предков - C++

29.08.2011, 21:55. Просмотров 1274. Ответов 5

C++
1
2
3
4
5
6
7
8
9
10
class A {...};
class B {...};
class C : A,B
{ private:
    int Var;
  public:
  C(const int &v) : A(&Var), B(&Var)
  { Var=v+5;
  }
};
Когда будут запущены конструкторы A и B? До или после C?
И как вообще расписать работу с родителями, если они должны инициализироваться по ссылкам на элементы потомка, но при этом для родителей актуальны фактические значения по ссылкам?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2011, 21:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Порядок инициализации предков (C++):

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

Порядок переменных в списке инициализации - C++
Есть класс, в нем 2 поля ссылка и bool, если в списке инициализации написать так :ссылка(NULL),bool(true) то компилятор выдает...

Порядок инициализации полей в конструкторе - C++
Имеется некий класс T. В нём имеются поля m_F1 (указатель) и m_F2 (неважно). Конструктор выглядит так: T::T() : m_F1 (new ...), ...

Порядок инициализации переменных в одном объявлении - C++
Есть оператор объявления переменных (надеюсь, правильно назвал) int ..., sr = n / 2 + n % 2 - 1, tl = n / 2 + n % 2, ...; Можно ли его...

Что такое порядок инициализации таблицы виртуальных методов? - C++
Что-то я не переварил это.

Восстановление предков обхода в ширину - C++
На шахматной доске NxN в клетке (x1, y1) стоит голодный шахматный конь. Он хочет попасть в клетку (x2, y2), где растет вкусная шахматная...

5
Enfernuz
22 / 22 / 1
Регистрация: 11.04.2011
Сообщений: 67
29.08.2011, 22:11 #2
Конструкторы будут запущены в порядке A,B,C. Деструкторы наоборот.

если они должны инициализироваться по ссылкам на элементы потомка, но при этом для родителей актуальны фактические значения по ссылкам?
Не совсем понятно. Поясните на примере, если не трудно.
1
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
29.08.2011, 23:17  [ТС] #3
Вообще, я разбираюсь с проблеммой http://ru.wikipedia.org/wiki/Ромбовидное_наследование и хочу понять как создавать систему классов в которых при множественном наследовании суперкласс не "размножается". В C++ без виртуальных объектов не обойтись, а мне они кажутся не удобными (плохо понимаемыми).

Обход этой проблеммы, я представляю в виде отказа от суперкласса для родителей, и ввод этого класса как отдельное поле в класс потомка. В моем примере суперкласс моделируется полем Var. Но возникает другая проблема - Var надо инициализировать до инициализации A и B, но сама инициализация Var возможна только в конструкторе. Т.е. у родителей могут быть параметры связанные с конкретными значениями у потомка.

Если б инициализация Var была простой, то можно просто поставить конструктор для Var до вызова конструкторов A и B. Но если логика будет сложнее, то возможна ситуация когда необходима последовательность вызовов конструкторов C,A,B.
0
Bers
Заблокирован
29.08.2011, 23:32 #4
Цитата Сообщение от skvor Посмотреть сообщение
В C++ без виртуальных объектов не обойтись, а мне они кажутся не удобными (плохо понимаемыми).
Вы имеете ввиду полиморфизм?

А... понял.. А не проще в принципе избегать такого наследования?
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
29.08.2011, 23:34 #5
зачем вам множественное наследование?
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
30.08.2011, 07:20 #6
Цитата Сообщение от skvor Посмотреть сообщение
C(const int &v) : A(&Var), B(&Var)
Ошибка, на которую должен намекнуть даже компилятор. А и В инициализируются не инициализированной переменной Var.
Кроме того, у тебя закрытое множественное наследование. Обрати внимание на слово "закрытое".
0
30.08.2011, 07:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2011, 07:20
Привет! Вот еще темы с ответами:

Найти всех предков человека с номером p - C++
заданы n человек и два массива натуральных чисел mother и father, такие, что mother – номер матери i-го человека, а father – номер его...

Порядок отрицательных членов изменить на обратный, порядок неотрицательных сохранить - C++
Задача (нужно все 3 пункта в 1 программе сделать) Прошу Помочь В условиях задания 3 а) порядок отрицательных членов изменить на...

Ошибка инициализации - C++
При такой инициализации вылезают ошибки: error C2064: term does not evaluate to a function taking 7 arguments IntelliSense: call of...

Конструктор инициализации - C++
Как передать параметры конструктору, если объект класса определен как указатель? #include <iostream> using namespace...


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

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

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