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

Как изменить тип объекта, на который указывает указатель? - C++

Восстановить пароль Регистрация
 
Нитонисе
7 / 7 / 2
Регистрация: 12.10.2013
Сообщений: 247
03.12.2013, 18:30     Как изменить тип объекта, на который указывает указатель? #1
Есть абстрактный базовый класс и два производных:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Base
{
protected:
int A;
};
 
class Child1 : public Base
{
private:
int B;
};
 
class Child2 : public Base
{
private:
int C;
};
Допустим я работаю с экземпляром класса Child1, но в какой-то момент времени мне нужно изменить тип объекта на Child2 с сохранением данных в защищенной части базового класса (переменная int A) и уничтожением данных в защищенной части производного класса (переменная int B).

C++
1
2
Base *ptrBase = new Child1();
//... что-то делаем, перенаправляя указатель на Child2
Как это сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2013, 18:30     Как изменить тип объекта, на который указывает указатель?
Посмотрите здесь:

Изменить значение элемента вектора, на который указывает итератор C++
Создать абстрактный тип данных (структура) - вектор, который имеет указатель на short и число элементов C++
C++ Как вывести адресс на который указывает указатель типа char*.
Указатель куда указывает? C++
C++ Узнать указывает ли указатель
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,040
03.12.2013, 18:36     Как изменить тип объекта, на который указывает указатель? #2
Цитата Сообщение от Нитонисе Посмотреть сообщение
Допустим я работаю с экземпляром класса Child1, но в какой-то момент времени мне нужно изменить тип объекта на Child2
тип объекта ни как не поменяешь
он уже существует и меняться не собирается
есть объект Вася и он ни как не поменяется на объект Таня
а вот указатель может поменять значение
указывал на Васю укажет на Таню
но в памяти должны присутствовать оба объекта
Нитонисе
7 / 7 / 2
Регистрация: 12.10.2013
Сообщений: 247
03.12.2013, 18:46  [ТС]     Как изменить тип объекта, на который указывает указатель? #3
Цитата Сообщение от ValeryS Посмотреть сообщение
а вот указатель может поменять значение
Ну это-то понятно. Но тогда же придется все данные из области protected базового класса (а данных там много и они нужны) переносить в новый объект? Вариант не очень подходящий.

А вот как меняют типы данных?
C++
1
2
int a;
double b = (double)a;
Изменили тип объекта а. Думал что-то подобное и в моем случае может получиться.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,040
03.12.2013, 18:50     Как изменить тип объекта, на который указывает указатель? #4
Цитата Сообщение от Нитонисе Посмотреть сообщение
Ну это-то понятно. Но тогда же придется все данные из области protected базового класса (а данных там много и они нужны) переносить в новый объект? Вариант не очень подходящий.
ничего не попишешь
новый объект ничего не знает про старый
ему нужно сообщить
для этого существуют конструкторы копирования и переопределяют присвоение
в твоем случае можно сделать так
конструктор копирования в базовом классе
C++
1
2
Base *ptrBase1 = new Child1();
Base *ptrBase2 = new Child2(*ptrBase1 );
Нитонисе
7 / 7 / 2
Регистрация: 12.10.2013
Сообщений: 247
03.12.2013, 18:58  [ТС]     Как изменить тип объекта, на который указывает указатель? #5
Цитата Сообщение от ValeryS Посмотреть сообщение
в твоем случае можно сделать так
конструктор копирования в базовом классе
Да, видимо так и придется делать. Похоже я изначально выбрал неудачную структуру программы, что возникает такая необходимость.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,040
03.12.2013, 19:09     Как изменить тип объекта, на который указывает указатель? #6
Цитата Сообщение от Нитонисе Посмотреть сообщение
А вот как меняют типы данных?
никак
Цитата Сообщение от Нитонисе Посмотреть сообщение
double b = (double)a;
здесь создается новый объект b и ему присваиватся значение объекта a(а поскольку он не проинициализирован значение- мусор)
считай(условно) это тот же конструктор копирования
Yandex
Объявления
03.12.2013, 19:09     Как изменить тип объекта, на который указывает указатель?
Ответ Создать тему
Опции темы

Текущее время: 05:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru