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

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

Войти
Регистрация
Восстановить пароль
 
ewqeqw
0 / 0 / 0
Регистрация: 26.04.2017
Сообщений: 19
#1

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

22.05.2017, 23:15. Просмотров 257. Ответов 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++):

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

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

Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка - C++
Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка. Всем огромное спасибо за помощь! |

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

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

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

3
zss
Модератор
Эксперт С++
6694 / 6256 / 2085
Регистрация: 18.12.2011
Сообщений: 16,334
Завершенные тесты: 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Эксперт С++
4278 / 1866 / 198
Регистрация: 20.02.2013
Сообщений: 4,997
Записей в блоге: 22
23.05.2017, 09:09 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от 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
23.05.2017, 09:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2017, 09:09
Привет! Вот еще темы с ответами:

Перегрузить оператор присваивания для класса - C++
Помогите, пожалуйста. Требуется написать оператор присваивания для данного класса class ARRAY{ int size; double **m; public: ...

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

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

Вызов специфических для потомка функций, не зная класса потомка - C++
Доброго времени суток. Когда-то давно делал работу в C#, а сейчас захотел повторить то же в C++. Затык вот в чем. был у меня...


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

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

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