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

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

Войти
Регистрация
Восстановить пароль
 
MashaTemn
Сообщений: n/a
#1

Присваивание при полиморфизме - C++

29.12.2013, 01:07. Просмотров 183. Ответов 1
Метки нет (Все метки)

Здравствуйте, помогите, пожалуйста)
Имеем класс A и унаследованный от него B.
Если попытаться присвоить один объект типа B, который "запомнен" с помощью указателя на A, другому такому объекту:
C++
1
2
3
4
5
A* b1;
A* b2;
b1=new B;
b2=new b;
*b1=*b2;
то скопируются только те поля, которые были объявлены в А. Как можно скопировать ещё и поля, объявленные в B?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2013, 01:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Присваивание при полиморфизме (C++):

Копирование при полиморфизме - C++
Всем доброго дня ! Почему при полиморфизме вызывается конструктор копировщик только базового класса (строка 70) ? Получаю...

Реализация операторов при полиморфизме - C++
Всем доброго времени суток ! Подскажите пожалуйста как реализовать операторы при полиморфизме, а именно: operator + () operator...

О полиморфизме - C++
проблема с полиморфизмом следующая. Создаю массив указателей на базовый класс, далее заполняю несколько первых ячеек массива ,НО делаю это...

Присваивание переменным значений при выбранном пункте ComboBox - C++
Здравствуйте, уважаемые программисты! Мне 13 лет и я пытаюсь освоить программирование на си ++ самостоятельно. У меня небольшая проблема. ...

Присваивание = - C++
Есть ли хоть какая-нибудь разница в следующих примерах: a = 0; b = 0; c = 0; и a = b = c = 0;

Присваивание... - C++
char f = 300; cout << f; system("PAUSE"); char f = 300; int s = f; cout << f; ...

1
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
29.12.2013, 02:19 #2
тут хитрая вещь может получится. если в иерархии появляется еще один класс C унаследованный от A, то может оказаться так, что мы пытаемся присвоить объекту типа C значение объекта типа B. причем B про С вроде как и не знает. с виртуальными операторами тут лучше не связываться. Решение в лоб: в точке присваивания, раз вы точно знаете типы, скастить ссылку к нужным типам их и вопспользоваться родным оператором:
C++
1
static_cast<B&>(*b1)=static_cast<B&>(*b2);
ну или dynamic_cast если нужна проверка и есть RTTI
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2013, 02:19
Привет! Вот еще темы с ответами:

Присваивание - C++
Помогите с оператором присваивания ) class Stack { private: myString *st; .... void operator=(myString); ...

Класс присваивание a=b=c - C++
Собственно, вот код. Компилируется. Но работает не так как надо.( class Foo #include &lt;iostream&gt; #include &lt;string&gt; using...

Присваивание матиц - C++
Не могу понять, как матрице 2, присвоить элементы матрицы 1. Помогите плиз В заданной матрице F записать на место отрицательных элементов...

Почему работает присваивание - C++
Пример из книги. Немогу понять, почему работает присваивание в main.cpp, ведь оператор = не перегружен?!?! //Complex.h ...


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

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

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