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

Переопределение операции присваивания - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как реализовать флаги в параметрах функции http://www.cyberforum.ru/cpp-beginners/thread1235623.html
Объясните пожалуйста как реализовать флаги в параметрах функции. К примеру: есть такие флаги left middle right drowPoints (тут параметры флаги); Вот так я эти флаги прописываю
C++ Исправить ошибку "undefined reference" Компилирую в Ubuntu 14.04 Code::Block Есть 3 файла. klass.h initial.cpp main.cpp klass.h #include <iostream> #include <cstring> using namespace std; class Book http://www.cyberforum.ru/cpp-beginners/thread1235621.html
C++ Убрать привязку к конкретной директории. GetCurrentDirectory
Привет, всем! Новая проблемка, имеется следующее: D3DXCreateTextureFromFileEx(pDirect3DDevice, "C:/Users/Anton/Documents/Visual Studio 2010/Projects/MyProgectSprite/OpeningScreen.bmp",...
Программа ввода и проверки пароля C++
Я хочу написать программу запрашивающая пароль пока тот не станет верным написал прогоамма работало но даже если пароль был не верен просто выводила другую строку добавил цикл программа не работает...
C++ Игра крестики нолики http://www.cyberforum.ru/cpp-beginners/thread1235549.html
#include <iostream> using namespace std; int main () { int a,k=0,c; char mas; while(k<10) {
C++ Вывод числа в столбик с первой цифры, без массива, без строк #include <iostream> #include <math.h> using namespace std; void p(long a) { long i=0,z=a; while (z) { z/=10; i++; //êîëè÷åñòâî öèôð âî ââåäåííîì ÷èñëå подробнее

Показать сообщение отдельно
dalay_lama
77 / 77 / 16
Регистрация: 22.09.2012
Сообщений: 482
29.07.2014, 09:19
Цитата Сообщение от Gwini Посмотреть сообщение
ну здесь по идее должен вызыватся конструктор копирования производного класса:
Цитата Сообщение от Gwini Посмотреть сообщение
Classic::Classic(const Classic& c):Cd(c) { main_cmps = new char[strlen(c.main_cmps) + 1]; strcpy(main_cmps, c.main_cmps); }
Цитата Сообщение от Gwini Посмотреть сообщение
Он должен был бы все коректно скопировать.
да как же он у тебя скопирует то всё корректно?)
как ты из объекта c, который является экземпляром класса Cd, вытащишь свойство main_cmps??? даже если ты сделаешь приведение типа для него, с какого перепугу ты решил, что там возьмётся корректное значение main_cmps? сам родит и угадает, что там должно оказаться?
именно поэтому и не рекомендуется так делать, как сделал ты. у производного объекта, есть все свойства, которые есть у базового, у базового не все, которые есть у производного, поэтому и нельзя присваивать базовый, производному.
Приведение типа доступно только для того, чтобы если бы ты точно был уверен, что в какой-то функции используются только базовые методы и свойства какого-то класса, но при этом, функция принимает только объекты производного класса, у тебя бы всё равно оставалась возможность передать объект - у тебя это не так, ты пытаешься воспользоваться свойством производного класса. Ты присваиваешь объект базового типа производному, используя привидение типа, ок, но у него ВСЁ РАВНО НЕТУ СВОЙСТВА ПРОИЗВОДНОГО КЛАССА, ОНО НЕ ПОЯВЛЯЕТСЯ ПО ВОЛЕ БОЖЬЕЙ.

Добавлено через 7 минут
Цитата Сообщение от Gwini Посмотреть сообщение
ну здесь по идее должен вызыватся конструктор копирования производного класса:
Цитата Сообщение от Gwini Посмотреть сообщение
Classic::Classic(const Classic& c):Cd(c) { main_cmps = new char[strlen(c.main_cmps) + 1]; strcpy(main_cmps, c.main_cmps); }
Цитата Сообщение от Gwini Посмотреть сообщение
Он должен был бы все коректно скопировать.
да как же он у тебя скопирует то всё корректно?)
как ты из объекта c, который является экземпляром класса Cd, вытащишь свойство main_cmps??? даже если ты сделаешь приведение типа для него, с какого перепугу ты решил, что там возьмётся корректное значение main_cmps? сам родит и угадает, что там должно оказаться?
именно поэтому и не рекомендуется так делать, как сделал ты. у производного объекта, есть все свойства, которые есть у базового, у базового не все, которые есть у производного, поэтому и нельзя присваивать базовый, производному.
Приведение типа доступно только для того, чтобы если бы ты точно был уверен, что в какой-то функции используются только базовые методы и свойства какого-то объекта, но при этом, функция принимает только объекты производного класса - у тебя это не так. Ты присваиваешь объект базового типа производному, используя привидение типа, ок, но у него ВСЁ РАВНО НЕТУ СВОЙСТВА ПРОИЗВОДНОГО КЛАССА, ОНО НЕ ПОЯВЛЯЕТСЯ ПО ВОЛЕ БОЖЬЕЙ.


Цитата Сообщение от dalay_lama Посмотреть сообщение
Classic temp = (const Classic&)c;
Цитата Сообщение от dalay_lama Посмотреть сообщение
конструктор копирования производного класса:
Цитата Сообщение от Gwini Посмотреть сообщение
Classic::Classic(const Classic& c):Cd(c)
что будет в конструкторе, в c.main_cmps?
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.