Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C++ Builder > Перегрузка операции = |
Автор: O_Nik 9.3.2007, 11:45 | ||||
Доброго времени суток. Вопрос: Не перегружается операция = имеется, например, класс, хочу его копировать, создавая новый объект класса и приравнивая имеющийся к нему
реализация перегрузки:
вместо моей перегрузки (копирования свойств) получается ссылка на объект, т.е. если объявить 2 реализации TBlock и одной приравнять другую, то свойства не скопируются, а просто произойдет ссылка на объект, т.е. a=b, а станет объектом b, а не просто скопирует его свойства как правильно перегрузить = в данном случае? и почему не вводя перегрузки = она уже есть? |
Автор: ama_kid 9.3.2007, 15:24 | ||||
Ну, не знаю, я слабал тестовый пример - и в нем все работает нормально:
Выдается только первый MessageBox с разными заголовком и текстом... Посмотри-поанализируй, в чем принципиальные различия...
Наверное, потому, что по умолчанию для объектов по операции = делается копирование значений со всей памяти, занимаемой объектом-источником в память целевого объекта, а при идентичности типов - это фактическое дублирование, что и наблюдаем... |
Автор: O_Nik 9.3.2007, 17:09 | ||
объявляю TBlock через указатель (мне надо через него)
|
Автор: Vyacheslav 9.3.2007, 17:53 | ||
|
Автор: O_Nik 9.3.2007, 21:03 | ||
Спасибо большое, очень признателен ![]() и еще если можно поясните пожалуйста, почему в классе, где есть свойство с определенной операцией перегрузки =, появляется операция перегрузки = для самого класса (а где нет такого свойства - не появляется). например если класс имеет поле AnsiString (с перегруженным=, то и класс имеет перегруженное =)
объясните подалуйста данный механизм наследования, заранее спасибо. |
Автор: Vyacheslav 10.3.2007, 18:51 | ||
Ничего не понял. Что такое "операция перегрузки"? В С++ нет такого термина. Есть теримин "перегруженная операция" И где в указанных классах есть, по Вашему мнению, свойство, а где нет?
Они совершенно идентичны кроме названия. А вообще бы я бы посоветовал для начала ознакомиться с основами С++. Из них Вы можете узнать, что компилятор обзязан в случае если этого не сделал программист, создать для класса 1.конструктор по умолчанию 2.деструктор 3.конструктор копировния, 4. оператор присваивания |
Автор: O_Nik 10.3.2007, 20:29 | ||||
:( я не так выразился, глупо конечно :( а тут опечатка, должно быть, что-то вроде этого:
почему в MyClass перегружена операция =, а в MyClass2 - нет? |
Автор: Vyacheslav 12.3.2007, 11:13 | ||||
А она есть ![]()
Если Вы свою информацию будете черпать исключительно из подсказчика, то не далеко уйдете. Кстати Ваши два класса
несмотря на разный тип члена класса (class member) по сути опять же ничем не отличаются и оба не имеют никаких свойств ( property ) ![]() |
Автор: O_Nik 12.3.2007, 12:44 |
спасибо, в любом случае вы мне помогли ![]() p.s. про свойство property я и не говорил, да и суфлеру не доверял особо, иначе бы спрашивать не стал. |
Автор: Vyacheslav 12.3.2007, 12:59 |
![]() |
Автор: O_Nik 12.3.2007, 17:46 |
...хорошо элемент класса или поле класса, если так угодно, а не свойство (надеюсь я тут в терминологию попал ![]() |