powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / ООП Delphi -> C++
16 сообщений из 16, страница 1 из 1
ООП Delphi -> C++
    #34953985
aspirin_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стоит задача - переделать прогу с Delphi на C++. В проге на Delphi наравне с прочими есть классы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
TExprClass=class
  private 
    ...
  protected
    ...
  public
    ...
    constructor Create;
  end;

constructor TExprClass.Create;
  begin
    inherited Create;
    FNext:=nil;
    Parent:=nil;
      ...
  end;

TExprParent=class(TExprClass)
  private
    FSon:TExprClass;
    procedure SetSon(Value:TExprClass);
    ...
  protected
    ...
  public
    property Son:TExprClass read FSon write SetSon;
    constructor Create(ASon:TExprClass);
    ...
end;

constructor TExprParent.Create;
  begin
    inherited Create;
    Son:=ASon
  end;

Вопрос в следующем - насколько я понял, Inherited означает вызов метода базового класса из производного. Как в таком случае будет выглядеть конструктор ExprClass::ExprParent(ExprClass *ASon) на C++?
...
Рейтинг: 0 / 0
ООП Delphi -> C++
    #34953989
aspirin_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри описался. Естественно ExprParent::ExprParent(ExprClass *ASon)
...
Рейтинг: 0 / 0
ООП Delphi -> C++
    #34954021
Iskan Der
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверное что-то типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
class ExprParent : ExprClass
{
...
public:
    ExprParent(ExprClass *aSon) : ExprClass()
    {
        this->fSon = aSon; // ну или что тут должно делаться
    }
}
...
Рейтинг: 0 / 0
ООП Delphi -> C++
    #34954683
aspirin_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а почему нельзя так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
class ExprParent : public ExprClass
{
...
public:
    ExprParent(ExprClass *aSon)
    {
        ExprClass::ExprClass();
        this->fSon = aSon;
    }
}
я не говорю что это правильно, просто хочу узнать почему так нельзя
...
Рейтинг: 0 / 0
ООП Delphi -> C++
    #34954703
Iskan Der
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По С++ я не спец (давно не занимался этим делом). Предложенный вариант просто взял из книжки под рукой :) Да и вообще он вроде самый употребимый.
Насчет вашего варианта - а он работает? Если да, значит можно и так :)
...
Рейтинг: 0 / 0
ООП Delphi -> C++
    #34954789
aspirin_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Iskan DerПо С++ я не спец (давно не занимался этим делом). Предложенный вариант просто взял из книжки под рукой :) Да и вообще он вроде самый употребимый.
Насчет вашего варианта - а он работает? Если да, значит можно и так :)
Я то тем более не спец, поэтому и спрашиваю. Ладно спасибо за совет, будем пробовать :)
...
Рейтинг: 0 / 0
ООП Delphi -> C++
    #34954863
aspirin_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще один вопрос - если в производном классе есть метод с таким же именем и типом, как в базовом классе, например void SetCanvas(), надо ли его в базовом описывать как virtual?
...
Рейтинг: 0 / 0
ООП Delphi -> C++
    #34955142
Iskan Der
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aspirin_Еще один вопрос - если в производном классе есть метод с таким же именем и типом, как в базовом классе, например void SetCanvas(), надо ли его в базовом описывать как virtual?
Смотря чего хотите добиться :) Скажем:
Код: plaintext
1.
2.
3.
BaseClass *b = new DerivedClass();
b->setCanvas(...); // какой метод тут надо вызвать? с virtual вызовется DerivedClass::setCanvas, 
                          // без него - BaseClass::setCanvas
Еще не факт, но по-моему компилятор будет варнинги выдавать, если метод не virtual. А вообще, тут в С++ все так же, как и в Delphi :)
...
Рейтинг: 0 / 0
ООП Delphi -> C++
    #34963307
aspirin_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если слово inherited не в конструкторе, а в другом методе, как тогда быть? Пример:
Код: plaintext
1.
2.
3.
4.
5.
 procedure TExprParent.DynaSetCanvas;
    begin
      inherited DynaSetCanvas;
      SetSonCanvas
    end;

Как это будет на C++ ?
...
Рейтинг: 0 / 0
ООП Delphi -> C++
    #34963436
daevaorn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aspirin_а почему нельзя так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
class ExprParent : public ExprClass
{
...
public:
    ExprParent(ExprClass *aSon)
    {
        ExprClass::ExprClass();
        this->fSon = aSon;
    }
}
я не говорю что это правильно, просто хочу узнать почему так нельзя
Так действительно нельзя. Т.е. результат ты получишь не тот, который ожидаешь. ExprClass::ExprClass(); - создает временный объект, который сразу же и уничтожается, поскольку не используется. Контсруктор по умолчанию базавого класса можно не звать в списке инициализации, он вызывается автоматически в процессе конструирования объект.
aspirin_Еще один вопрос - если в производном классе есть метод с таким же именем и типом, как в базовом классе, например void SetCanvas(), надо ли его в базовом описывать как virtual?
зависит от цели. если нужен полиморфизм, то нужно объявить ей вирутальной. не нужен - тогда произойдет прегрузка родительской функции и новая её скроет.
aspirin_А если слово inherited не в конструкторе, а в другом методе, как тогда быть? Пример:
Код: plaintext
1.
2.
3.
4.
5.
 procedure TExprParent.DynaSetCanvas;
    begin
      inherited DynaSetCanvas;
      SetSonCanvas
    end;

Как это будет на C++ ?
Нужно позвать функцию с явным разрешением имен. Т.е. ExprClass::DynaSetCanvas();

PS: лучше возьми книгу по С++ и не будет таких вопросов.
...
Рейтинг: 0 / 0
ООП Delphi -> C++
    #34966746
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aspirin_Стоит задача - переделать прогу с Delphi на C++
В смысле - "с одного языка, который не знаете, на другой, который не знаете"? Это непросто... я бы посоветовал взять книжки по обоим. Между ними есть ряд нетривиальных различий, переводя без понимания, попадете... не туда, в общем.
...
Рейтинг: 0 / 0
ООП Delphi -> C++
    #34972931
Так_забежал_просто
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aspirin_Стоит задача - переделать прогу с Delphi на C++.
Пардон, а зачем?
...
Рейтинг: 0 / 0
ООП Delphi -> C++
    #34973246
aspirin_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer
В смысле - "с одного языка, который не знаете, на другой, который не знаете"? Это непросто... я бы посоветовал взять книжки по обоим. Между ними есть ряд нетривиальных различий, переводя без понимания, попадете... не туда, в общем.
Один из языков (Delphi) я более или менее знаю, второй (C++) изучаю. Книжек по обоим языкам у меня в избытке, но не в каждой книжке доходчиво описано про то что я спрашиваю, по крайней мере пока я такую нашел только одну - С.Прата - Язык программирования C++. Лекции и упражнения.
Так_забежал_простоПардон, а зачем?
Затем что надо. Если конкретно, то по трем основным причинам: 1) проект подразумевает создание продукта на C++; 2) среда разработки проекта будет приобретена у мелкософта, а т.к. она не содержит Паскаль-компилятора, то выбор языка очевиден ; 3) так я лучше изучу C++ и ООП, чем просто читая книжки.
И вообще какая разница зачем? Мы здесь не философские вопросы обсуждаем а решаем конкретные вопросы по особенностям языков программирования.
...
Рейтинг: 0 / 0
ООП Delphi -> C++
    #34973281
SnowMan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор среда разработки проекта будет приобретена у мелкософта, а т.к. она не содержит Паскаль-компилятора, то выбор языка очевиден

Если проект активно использет VCL классы, то переводить в мелкософтовский С++ будет очень неприятно. Может подумать о C++Builder.
...
Рейтинг: 0 / 0
ООП Delphi -> C++
    #34976320
break
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
раз уж вы собираетесь изучать C++ то имейте ввиду что для программирования для Windows можно использовать Express версию среды MSVisualStudio 2005 кот. является бесплатной, докачав для нее PlatformSDK можно будет сделать уже многое..

Кроме того соит ли останавливаться только на Windows, есть открытая версия QT кот. позв. вам сделать кроссс-платф. приложение(для Windows в том числе), уж чем покупать MS VC - лучше QT коммерческий купить и вообще жить счастливо...

тем более что при переходе с Delphi на C++ QT будет более понятен чем MFC
...
Рейтинг: 0 / 0
ООП Delphi -> C++
    #34976649
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну уж самый лёгкий переход с Delphi будет всё-же Builder. И среда похожая, и компоненты одни и те-же. Хороший способ освоить синтаксис, а параллельное чтение учебников и разных умных книжек позволит быстро пойти дальше. Моё имхо, что Qt прекрасная библиотека, но предъявляет требования к знанию языка на порядок большие, чем билдер
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / ООП Delphi -> C++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]