Форум программистов, компьютерный форум 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++ Почему начинающим советуют не работать с формами на С++? Часто слышала от знакомых, что лучше пока не трогать формы. С чем это связано? Как понять что уже можно с ними работать? какие знания для этого нужны ? подробнее

Показать сообщение отдельно
4elovek37
2 / 2 / 0
Регистрация: 10.10.2014
Сообщений: 28
Завершенные тесты: 1
02.09.2016, 13:31  [ТС]
Usagi,
operator<< в данном примере дружественная функция
Да, с этим все просто.
По поводу operator=() по ходу решения задачи с портвейном(доставляют в этом учебнике подобные задачи) пришло соображение, почему так делают: Оперируя массивом указателей на базовый класс, мы не можем заранее знать на объект какого класса (базового, или одного из производных) указывает указатель. Теоретически пользователь может попытаться:
1)Присвоить объект производного класса базовому - тут все более менее нормально и при virtual op=() и при non-virtual вызовется оператор присваивания базового класса и мы заберем однозначно существующие данные-члены от объекта произв. класса;
2)Присвоить объект базового класса производному - а вот тут могут возникнуть проблемы: если у нас virtual op=(), то вызовется оператор присваивания производного класса, который, скопировав базовую часть, попытается обратится к данным-членам, которых у присваиваемого объекта базового класса попросту нет. Результат не определен. Если же у нас non-virtual op=(), то мы скопируем только базовую часть, не пытаясь обратиться к несуществующим данным. Смысла в подобных действиях мало (получится смешанный набор данных), но зато ошибок точно не будет.
3)Присвоить объект одного произв. класса объекту другого произв. класса. Тут можно см. п.2, с небольшими отличиями.
Короче говоря, non-virtual op=() гарантирует что при использовании этой операции мы гарантированно скопируем только однозначно существующие данные, принадлежащие базовому классу. За всем остальным к ручному приведению типов, тогда уже пользователь берет ответственность целиком и полностью на себя.
Как то так. Может, я опять что-то напутал, у меня в последнее время такое ощущение все чаще
И тоже читаю этот же учебник
И как Вам? Есть прогресс?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru