Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2009, 12:21   #1
VladimirVB
Форумчанин
 
Аватар для VladimirVB
 
Регистрация: 12.10.2008
Сообщений: 131
Стрелка ООП. Разница между С и Дельфи

Здравствуйте.
По умолчанию в С++, когда один объект присваивается другому, делается поразрядная копия всех данных-членов копируемого объекта и при этом два объекта остаются по-прежнему независмыми друг от друга. Как такое сделать в Delphi? Ведь в Delphi копируется адрес, а не значения.
VladimirVB вне форума Ответить с цитированием
Старый 30.11.2009, 12:30   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Вручную для своего класса.
Для какой задачи это требуется?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 30.11.2009, 12:35   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Легкий примерчик:
Код:
 type
  a=class(TObject)
   p:integer;
  end;
  var q,w:a;
begin
 q:=a.Create;
 q.p:=10;
 w:=a(q.NewInstance);
 w.p:=20;
 write(q.p,w.p);
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Цитата:
Вручную для своего класса.
Свят свят... Какой же уважающий ся программист вручную работает )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.11.2009, 12:42   #4
VladimirVB
Форумчанин
 
Аватар для VladimirVB
 
Регистрация: 12.10.2008
Сообщений: 131
По умолчанию

Я сейчас читаю книгу Шилдта "Самоучитель С++" и все примеры переделываю на Delphi. Глава называется "Присваивание объектов".

Код:
// Пример присваивания объекта
#include <iostream>
using namespace std;

class myclass {
	int a, b;
public:
	void set (int i, int j) (a = i;b=j; }
	void show() { cout << a << ' ' << b << "\n"; }

int main()
	myclass o1, o2;
	o1.set(10, 4);
	// o1 присваивается о2
	o2 = o1;
	ol.show();
	o2.show();
	return 0;
}
Вот откуда появился у меня этот вопрос. В Delphi у объектов, которые наследуются от TPersistent есть метод Assign, который позволяет выполнять именно эту операцию. Но как применить к этому случаю, пока не получается.
VladimirVB вне форума Ответить с цитированием
Старый 30.11.2009, 14:15   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Вручную. Определи метод копирования данных одного класса в другой класс.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 30.11.2009, 14:33   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

не забывайте что в Делфи указатель на обьект а не сами обьекты
то есть
Код:
var Object:TObject;
это в С++
Код:
TObject* Object;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.11.2009, 20:21   #7
VladimirVB
Форумчанин
 
Аватар для VladimirVB
 
Регистрация: 12.10.2008
Сообщений: 131
По умолчанию

Получается, что С++ более гибок, чем Delphi. В С++ объектные переменные можно создавать как статически, так и динамически. А в Delphi только динамически.
VladimirVB вне форума Ответить с цитированием
Старый 30.11.2009, 20:33   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

скажу лишь одно, Доброе утро
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.12.2009, 08:47   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от VladimirVB Посмотреть сообщение
Получается, что С++ более гибок, чем Delphi. В С++ объектные переменные можно создавать как статически, так и динамически. А в Delphi только динамически.
Ничего подобного. Выделяй под поля класса память из кучи и все проблемы с копированием будут решены . Копировать конечно придется вручную, но не значит, что невозможно.
И потом я бы это назвал не гибкостью, а громоздкостью. Поэтому согласен с постом Феникса.
Теоретически есть второй вариант - получить адреса секций public, private и т.д. Но не факт, что получится, сам так не пробовал.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В чем разница между С и С++? Freddy Krjuger Общие вопросы C/C++ 1 14.11.2009 21:23
Разница между двумя datetimepicker Droid Общие вопросы Delphi 3 24.09.2009 23:20
Разница между временем asd48 Microsoft Office Excel 1 05.06.2009 23:44
Разница между датами kykysya Общие вопросы Delphi 8 26.03.2009 18:22
Разница между датами deenka БД в Delphi 3 31.01.2008 13:21