Что я пропустил? Приведение типов указателей базовых классов к указателям производных классов - страница 2

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ого, таки можно.
Тогда как-то так:
Код:
Как мне получить доступ к X.Value?
попробуйте так
((CPatternWW *)X).Value = 3;
попробуйте так
((CPatternWW *)X).Value = 3;
Ничего себе... у меня мозг вскипел....
Ладно, это работает, а как эту заставить работать?
Сам себе отвечаю:
Сам себе отвечаю:
Здесь имеет место ошибка в компиляторе, он должен был Вам сообщить о невозможности подобрать вызов из двух SetValue, это я исправлю.
В Вашем коде, скорее всего, неправильно используется virtual. Фактически у Вас две виртуальные функции SetValue, одна с параметром char, другая int.
Здесь имеет место ошибка в компиляторе, он должен был Вам сообщить о невозможности подобрать вызов из двух SetValue, это я исправлю.
В Вашем коде, скорее всего, неправильно используется virtual. Фактически у Вас две виртуальные функции SetValue, одна с параметром char, другая int.
Так он вроде бы правильно подбирает...
Как в итоге то правильно? Именно для моей конструкции
Я бы сделал так.
Я бы сделал так.
{
protected:
public:
virtual void SetValue(int Val) { }
virtual void PrintValue() { }
};
class CPatternWW: public CPattern
{
protected:
public:
int Value;
virtual void SetValue(int Val){Value = Val;};
virtual void PrintValue(){ Print(Value); }
};
void OnStart()
{
CPattern *X; // В последующем Массив, где будут содержаться разные классы
X = new CPatternWW; // Создаём класс, отличный от базового
//Эта конструкция работает:
((CPatternWW *)X).Value = 3;
X.PrintValue(); // Выводит на печать 3
//и эта работает:
X.SetValue(11);
X.PrintValue(); // Выводит на печать всю туже 3
delete X;
}
Не! Ну это понятно! Только вся и соль в том, что тип переменной Value в каждом производном классе (а их будет штук 30 к примеру) будет разный (структура). Все объекты будут содержаться в одном массиве...
Поэтому раз моя конструкция работает, то предлагаю уже ничего в компиляторе не менять.... На данном этапе меня это устраивает!!!
Вопрос то возник из-за того, что у Вас в документации я нигде не нашёл вышенаписанной конструкции с множеством скобочек для приведения типа....
Не! Ну это понятно! Только вся и соль в том, что тип переменной Value в каждом производном классе (а их будет штук 30 к примеру) будет разный (структура). Все объекты будут содержаться в одном массиве...
Поэтому раз моя конструкция работает, то предлагаю уже ничего в компиляторе не менять.... На данном этапе меня это устраивает!!!
Вопрос то возник из-за того, что у Вас в документации я нигде не нашёл вышенаписанной конструкции с множеством скобочек для приведения типа....
Y.Func();
Рекомендую завести виртуальный метод Type() который позволит определить по базовому указателю, реальный тип объекта.
Преобразовать базовый указатель к реальному и уже с ним работать. Некорректное преобразование указателя вызовет критическую ошибку выполнения.
Не! Ну это понятно! Только вся и соль в том, что тип переменной Value в каждом производном классе (а их будет штук 30 к примеру) будет разный (структура).