инициализация родительского класса |
Здравствуйте, гость ( Вход | Регистрация )
инициализация родительского класса |
Litkevich Yuriy |
4.6.2008, 8:37
Сообщение
#1
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
есть такой код:
h:
cpp:
т.е я инициализировал родительский класс некой константой, а тепрь мне понадобилось сделать конструктор который принимает некую переменную: h:
и в зависимости от того какой константе она равна, инициализировать родительский класс, как бы это сделать, как в теле конструктора, например, проинициализировать родителя? |
|
|
ViGOur |
4.6.2008, 8:51
Сообщение
#2
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
#define ?
|
|
|
Litkevich Yuriy |
4.6.2008, 9:12
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
в зависимости от переменной!
#define на этапе компиляции только. У меня родительский конструктор объявлен так: TableEditor(int type, QWidget *parent = 0), а дочернему передается строковая переменная. т.е. есть такая часть строки: : TableEditor(MY_CONST, parent) как ее засунуть в тело конструктора, чтоб получилось примерно такое:
но эта форма записи неправильная, как я понимаю. Есть ли иной способ инициализации родительского класса, кроме:
|
|
|
ViGOur |
4.6.2008, 9:40
Сообщение
#4
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Как вариант можно использовать шаблон:
|
|
|
ViGOur |
4.6.2008, 9:49
Сообщение
#5
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Выбирай сам...
Сообщение отредактировал ViGOur - 4.6.2008, 9:51 |
|
|
Andrew Selivanov |
4.6.2008, 11:19
Сообщение
#6
|
Участник Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: 6 |
Мне кажется ты слишком заморачиваешься. Просто вынеси инициализацию из конструктора в метод TableEditor::Init(int type), вызывай его потом с нужным параметром...
|
|
|
Red Devil |
8.6.2008, 17:34
Сообщение
#7
|
Студент Группа: Участник Сообщений: 68 Регистрация: 6.6.2008 Из: Saint-Petersburg Пользователь №: 194 Спасибо сказали: 1 раз(а) Репутация: 3 |
Если не слишком много возможных вариаций - то можно через тернарный оператор
Тернарные операторы можно соединить, т.е. сделать цепочку из них как и в switch, но только все будет утыкано в ? и : - и разобратся будет сложновато в будующем, т.к. читабельность будет не очень хорошая. Но работать все будет, так как нужно. Сообщение отредактировал Red Devil - 8.6.2008, 17:42 |
|
|
Litkevich Yuriy |
8.6.2008, 18:49
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
а сам switch туда нельзя засунуть?
|
|
|
ViGOur |
8.6.2008, 19:46
Сообщение
#9
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
а сам switch туда нельзя засунуть? Можно, но только в макрос, примерно так:
|
|
|
Red Devil |
8.6.2008, 20:20
Сообщение
#10
|
Студент Группа: Участник Сообщений: 68 Регистрация: 6.6.2008 Из: Saint-Petersburg Пользователь №: 194 Спасибо сказали: 1 раз(а) Репутация: 3 |
ViGOur, это не будет компилироватся
Litkevich Yuriy Цитата а сам switch туда нельзя засунуть? Насколько я знаю нет. Можно сделать фунцкию, которая будет возвращать значение.
Ну и красивше конечно сделать эту функцию методом класса TREditor или TableEditor, она тогда конечно статической должна будет быть. Сообщение отредактировал Red Devil - 8.6.2008, 20:24 |
|
|
Текстовая версия | Сейчас: 6.2.2025, 1:18 |