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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2015, 22:46   #21
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
TInStruct& value равноценно var value:TInStruct
const TInStruct * value равноценно value:^TInStruct
Не совсем так,

TInStruct value равноценно var value:TInStruct (выделяет память под всю структуру)

TInStruct *value равноценно var value:^TInStruct (выделяет память только под указатель)

А вот насчет:

TInStruct &value, так это ссылки, а особенность их в том, что они инициализируются один раз и их нельзя переопределить. Синтаксис обращения к ним немного другой, например, если ссылка на структуру, то обращение к переменным структуры идет через "." вместо "->", т.е. по аналогии если просто объявить саму переменную, а не указатель.

По сути, это обычный указатель, но который мы не можем переопределить, и взаимодействие с которым ничем не отличается от взаимодействия с просто объявленной переменной.

Как я понимаю, аналогии в Delphi нету, ну или я просто еще ее не знаю.

Может запутанно объяснил, но как-то так.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 04.08.2015, 09:00   #22
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Ссылки - это более безопасная замена указателям. Были созданы в основном для перегрузки операторов. Один раз проициализированная ссылка уже не может ссылаться ни на что другое, в отличие от указателей.
Вообще если не выполняется никаких сложных манипуляций с указателем, который является параметром метода или функции, то лучше заменить его ссылкой.
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 09.08.2015, 17:31   #23
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ребят, а кто-нибудь может привести пример создания указателя на объект и события к нему в виде указателя на процедуру или функцию?

Например кнопка и showmessage.

Есть ли аналог new?

Кст, а при обычном динамическом создании кнопки, если не указать родителя, то получается объект созданный просто память нужную будет занимать?

З.ы.: Отличия

Цитата:
Указателя на функцию от просто функции, вообще саму идею: для чего это нужно
Так же и с указателями на объект от самого объекта.
Говоря, то что все в делфи было намного проще - я имел ввиду то, что никогда там не пользовался ^. И все прекрасно работало так, как надо мне.
from dark to light)

Последний раз редактировалось Stilet; 09.08.2015 в 17:58.
Алексей_2012 вне форума Ответить с цитированием
Старый 09.08.2015, 18:13   #24
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
Пример создания указателя на объект и события к нему.

Например кнопка и showmessage.
Создаем кнопку:

Код:
        TButton *my_button = new TButton(Form1);
        my_button->Parent=Form1;
        my_button->Caption="ShowMessage";
        my_button->Left=10;
        my_button->Top=50;
        my_button->OnClick = my_buttonClick;
Функция my_buttonClick:

.cpp
Код:
void __fastcall TForm1::my_buttonClick(TObject *Sender)
{
        ShowMessage("ShowMessage");
}
.h
Код:
class TForm1 : public TForm
{
        ...
        void __fastcall my_buttonClick(TObject *Sender);
        ...
};
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).

Последний раз редактировалось Krasiosoft; 09.08.2015 в 18:15.
Krasiosoft вне форума Ответить с цитированием
Старый 12.08.2015, 22:41   #25
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Спасибо за ответ, но это С++ Билдер, а для понимания кода - если литература мне не помогла и различные видео, посвященные теме указателей - то есть другой метод для обучения, как говорят: "Чтобы научиться программировать - нужно программировать", не знаю слышали ли вы такую цитату) В общем буду действовать этим методом.

Согласитесь - лучше потерять время и постараться научиться, чем признать то, что "не мое".)

Ребят, а как код, написанный Krasiosoft'ом будет выглядеть в делфи? Т.е. сам указатель на объект и указатель на функцию.

Спасибо!
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 12.08.2015, 22:51   #26
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

И вообще, например, в этом QT коде создается динамическая кнопка родитель - форма.
Код:
void MainWindow::on_btnAdd_clicked()
{
    QPushButton *btn = new QPushButton(this);

    btn->setText(QString::number(buttonList.size()));
    btn->setGeometry(ui->btnAdd->geometry());
    btn->show();
    buttonList.append(btn);
}
А без использования звездочки кнопка не создается, и компилятор ругается на попытку добавления объекта btn в список QList, запись которого мне тоже не ясна

*.h
Код:
 QList<QPushButton*> buttonList;
*.cpp (вариант без *)

Код:
void MainWindow::on_btnAdd_clicked()
{
  //  QPushButton *btn = new QPushButton(this);
  QPushButton btn; // объект btn
    btn.setText(QString::number(buttonList.size()));//caption
    btn.setGeometry(ui->btnAdd->geometry()); //размер 
    btn.show(); //показать
 //   buttonList.append(btn); - не добавляет (почему)?

}
з.ы.: если кому интересно, то это фрагмент программы, в которой создается объекты кнопок по кругу на форме с приминением анимации. Код взят с просторов YouTube.
Во вложении код и скрин работы.

Думаю многим это будет интересно, написано на QT
Изображения
Тип файла: jpg animation.jpg (25.1 Кб, 15 просмотров)
Вложения
Тип файла: txt h-файл.txt (621 байт, 111 просмотров)
Тип файла: txt срр-файл.txt (1.3 Кб, 118 просмотров)
from dark to light)

Последний раз редактировалось Алексей_2012; 12.08.2015 в 23:07.
Алексей_2012 вне форума Ответить с цитированием
Старый 12.08.2015, 23:30   #27
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
а как код будет выглядеть в делфи?
Создаем кнопку:
Код:
var
  my_button: TButton;

  ...

  my_button:= TButton.Create(Form1);
  my_button.Parent:= Form1;
  my_button.Caption:='ShowMessage';
  my_button.Left:=10;
  my_button.Top:=50;
  my_button.OnClick := my_buttonClick;
Функция my_buttonClick:
Код:
type
  TForm1 = class(TForm)
    ...
    procedure my_buttonClick(Sender: TObject);
    ...
  end;
Код:
procedure TForm1.my_buttonClick(Sender: TObject);
begin
  ShowMessage('ShowMessage');
end;
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 12.08.2015, 23:53   #28
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Цитата:
Ребят, а кто-нибудь может привести пример создания указателя на объект и события к нему в виде указателя на процедуру или функцию?
Цитата:
Говоря, то что все в делфи было намного проще - я имел ввиду то, что никогда там не пользовался ^. И все прекрасно работало так, как надо мне.
Вот первоначальный пост, я имел ввиду не просто объект, а указатель на объект и указатель на функцию, дабы изучить как это все будет работать в делфи и поменять там что-нибудь, поэкспериментировать, в общем. Если такое, конечно, возможно.

А как обычные объекты или массивы объектов и событие к ним создаются динамически - знаю.

Спасибо)

з.ы.: обратил внимание на то, что в примере создания кнопки на С++ Билдере опять же используется указатель на эту кнопку

з.з.ы.: не подумайте того, что я стебусь, но для чего он там? Что если объявить просто объект my_button
from dark to light)

Последний раз редактировалось Алексей_2012; 12.08.2015 в 23:57.
Алексей_2012 вне форума Ответить с цитированием
Старый 13.08.2015, 00:32   #29
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Указатель на функцию:

Код:
procedure Func(str:string);
begin
  ShowMessage(str);
end;

procedure Test;
type
  MyFunc = procedure(str: string);
var
  tempFunc:MyFunc;
  str:string;
  i:integer;
  b:^byte;
begin
  //  берем адрес функции Func в переменную tempFunc
  tempFunc:=Func;
  //  берем первые 10 байт функции
  b:=@tempFunc;
  for i:=1 to 10 do
  begin
    str:= str + IntToHex(b^,2)+' ';
    inc(b);
  end;
  //  вызываем эту функцию, которая выдаст сообщение "ShowMessage" и первые 10 байт себя
  tempFunc('ShowMessage '+str);
end;
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 13.08.2015, 03:11   #30
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ого, не плохо, спасибо, а вот в делфи, видимо, нет таких понятий как указатель на объект...

Ребят, а вот на счет вопроса по коду из поста 26 - кто-нибудь сможет объяснить доходчиво разницу между двумя вариантами кода, в соответствии с моим вопросом ?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
указатели salmon172 Паскаль, Turbo Pascal, PascalABC.NET 0 31.05.2011 21:34
указатели Артэс Общие вопросы C/C++ 4 07.09.2010 11:08
Указатели Анютик_sexi Помощь студентам 3 16.06.2010 14:38
Указатели AquaticSoul Общие вопросы C/C++ 5 22.12.2009 15:13
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39