Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ewqeqw
0 / 0 / 0
Регистрация: 26.04.2017
Сообщений: 19
#1

Реализовать оператор= для присваивания объекта класса-потомка объекту базового класса - C++

22.05.2017, 23:15. Просмотров 332. Ответов 3
Метки нет (Все метки)

Есть два класса A и B, причем класс B является потомком A. Как реализовать следующее: obj_A = obj_B и obj_B = obj_A?

Добавлено через 9 часов 13 минут
неужто никто не знает?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2017, 23:15
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Реализовать оператор= для присваивания объекта класса-потомка объекту базового класса (C++):

Реализовать оператор присваивания для класса куб
Дана длина ребра куба. Вычислить объем куба и площадь его боковой поверхности....

Вызов метода базового класса из класса-потомка
Нужно вызывать из метода, переопределенного в потомке, соответствующий метод...

Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка
Создать конструктор копий и оператор присваивания для класса компьютер и члена...

Использование перегруженного оператора ввода/вывода в поток базового класса для объекта производного класса
Здравствуйте! Можно ли использовать перегруженный оператор ввода/вывода в поток...

Почему объект производного класса не видит префиксный оператор из базового класса?
Короче создал я базовый класс с перегруженным префиксным оператором ++. Потом...

Указатель на объект базового класса и адрес объекта производного класса
Пример кода: class Class1 { public: Class1(int x) { j = new int;...

3
zss
Модератор
Эксперт С++
6956 / 6518 / 4138
Регистрация: 18.12.2011
Сообщений: 17,208
Завершенные тесты: 1
23.05.2017, 05:56 #2
Такие приведения выполняются через указатели
C++
1
2
3
4
5
6
A a;
B b;
A* pa;
pa=&b;
B* pb;
pb=static_cast<B*>(&a);
Или через ссылки
C++
1
2
3
    
B& rb=static_cast<B&>(a);
A& ra=b;
0
ewqeqw
0 / 0 / 0
Регистрация: 26.04.2017
Сообщений: 19
23.05.2017, 08:02  [ТС] #3
Можно ли это сделать через перегрузку оператора присваивания?
0
gru74ik
Модератор
Эксперт CЭксперт С++
4648 / 1962 / 293
Регистрация: 20.02.2013
Сообщений: 5,225
Записей в блоге: 23
23.05.2017, 09:09 #4
Лучший ответ Сообщение было отмечено ewqeqw как решение

Решение

Цитата Сообщение от ewqeqw Посмотреть сообщение
Можно ли это сделать через перегрузку оператора присваивания?
Можно, но с "потерей точности" - данные-члены (поля класса), имеющиеся в потомке, но отсутствующие в родителе, после присваивания никак в родителе волшебным образом не появятся:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <string>
 
class Parent
{
    int age_;
public:
    Parent(const int age) :
        age_(age)
    {}
 
    int get_age() const
    {
        return age_;
    }
 
    friend std::ostream & operator<<(std::ostream & os, const Parent & p)
    {
        os << p.get_age();
        return os;
    }
};
 
class Child : public Parent
{
    std::string name_;
public:
    Child(const int age, const std::string & name) :
        Parent(age),
        name_(name)
    {}
 
    Parent operator=(const Child & c)
    {
        Parent p(c.get_age());
        return p;
    }
 
    friend std::ostream & operator<<(std::ostream & os, const Child & c)
    {
        os << c.name_ << " " << c.get_age();
        return os;
    }
};
 
int main()
{
    Parent a(22);
    std::cout << "Parent before assignment: " << a;
 
    Child b(5, "John");
    std::cout << "\nChild before assignment: " << b;
 
    a = b;
    std::cout << "\nParent after assignment: " << a;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2017, 09:09
Привет! Вот еще темы с решениями:

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор *
Помогите в следующем: Для класса шаблона следует перегрузить оператор...

Перегрузить оператор присваивания для класса
Помогите, пожалуйста. Требуется написать оператор присваивания для данного...

Оператор индексации и присваивания для шаблонного класса Vector C++
Было задание разработать шаблонный класс Vector и к нему перегрузить оператор ...

Доступ к объекту базового класса при закрытом наследовании
Есть класс Pair из стандартной библиотеки. Он у меня содержит 2 массива...


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

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

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