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

Переопределение операции присваивания - 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", D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, D3DCOLOR_ARGB(255,255,255,255), NULL, NULL, &openingTexture); Мне не нравится строка...
Программа ввода и проверки пароля C++
Я хочу написать программу запрашивающая пароль пока тот не станет верным написал прогоамма работало но даже если пароль был не верен просто выводила другую строку добавил цикл программа не работает вот код #include <iostream.h> #include <stdio.h> #include <locale> using namespace std; int hacerAlert () { string answer;
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
 Аватар для dalay_lama
65 / 65 / 7
Регистрация: 22.09.2012
Сообщений: 434
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?
 
Текущее время: 19:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru