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

Как правильно использовать operator= при наследовании в полиморфных и неполиморфных классах - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как определить размер массива объявленного в другом модуле? http://www.cyberforum.ru/cpp-beginners/thread1801232.html
Возникла необходимость разбить программу на модули, и появилась проблема: Module1.cpp: ... int mas = {1, 2, 3, 4, 5}; ... Module2.cpp: ... extern int mas;
C++ Реализовать очередь с приоритетным включением на обычном массиве посмотрите код что то не правильно работает или просто не дописал норм код в методе int Adqueue() не могу сделать //1. Реализовать очередь с приоритетным включением на обычном массиве. #include <iostream> #include <time.h> using namespace std; class ExclusionProirityQueue http://www.cyberforum.ru/cpp-beginners/thread1801190.html
Вывод массива string C++
#include "stdafx.h" #include <iostream> #include <cstring> int main() { using namespace std; int sum = 0; int a;
C++ Прототип функции создающей двумерный массив
Доброго времени суток , помогите пожалуйста разобраться с заданием. Создайте функцию с ее прототипом (int a,int n). Функция во время своего выполнения должна создавать массив размерностью n на 10. #include <iostream> using namespace std; void mas(int a, int n); int main() { int n;
C++ Нужен пример кейлоггера http://www.cyberforum.ru/cpp-beginners/thread1801125.html
Срочно нужен кейлоггер который будет считывать все нажатия с клавиатуры и записывать их в текстовый файл. нужно чтоб этот кейлоггер был в процессах или в трее(главное чтоб не было видно) Кому не лень бросьте простой исходничек на с++) заранее спасибо!
C++ Почему начинающим советуют не работать с формами на С++? Часто слышала от знакомых, что лучше пока не трогать формы. С чем это связано? Как понять что уже можно с ними работать? какие знания для этого нужны ? подробнее

Показать сообщение отдельно
Usagi
0 / 0 / 2
Регистрация: 03.07.2016
Сообщений: 14
Завершенные тесты: 2
02.09.2016, 15:03     Как правильно использовать operator= при наследовании в полиморфных и неполиморфных классах
2)Присвоить объект базового класса производному
Объект базового класса просто вызовет свой operator=(), скопирует базовую часть и на этом успокоится. Члены произвольного класса использоваться не будут. Присваивается же объекту базового класса, поэтому это будет транслировано в базовый_класс.operator=(производный_класс).

3)Присвоить объект одного произв. класса объекту другого произв. класса. Тут можно см. п.2, с небольшими отличиями.
Если все эти оба объекта имеют одного общего предка, то проблем тоже возникнуть не должно. Скопируется общая часть классов - базовая, так как сначала будет вызвана операция присваивания базового класса.

Если operator=() объявлен как виртуальный, всё равно будет вызвана операция базового класса, а потом производного. Модель открытого наследования, отношение "является". Единственное, что мне не понятно, почему его можно объявить виртуальным.

А по учебнику - очень хорошая вещь. Даже купил, хотя и читаю в электроном виде. Прогресс? Конечно. Большая разница между "до" и "после".

Добавлено через 11 минут
Единственное, что мне не понятно, почему его можно объявить виртуальным.
Не так: "Зачем его объявлять виртуальным?".

Добавлено через 13 минут
2)Присвоить объект базового класса производному
Объект базового класса просто вызовет свой operator=(), скопирует базовую часть и на этом успокоится. Члены произвольного класса использоваться не будут. Присваивается же объекту базового класса, поэтому это будет транслировано в базовый_класс.operator=(производный_класс).
Ошибка, утверждение верно для присваивания объекта производного класса объекту базового.
Если присваивать объект базового класса производному, то без явно определённого operator=() для присваивания базового класса производному или конструктора преобразования не сработает.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru