Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / ООП Delphi -> C++ / 16 сообщений из 16, страница 1 из 1
21.11.2007, 09:02
    #34953985
aspirin_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП Delphi -> C++
Стоит задача - переделать прогу с 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
21.11.2007, 09:04
    #34953989
aspirin_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП Delphi -> C++
Сорри описался. Естественно ExprParent::ExprParent(ExprClass *ASon)
...
Рейтинг: 0 / 0
21.11.2007, 09:24
    #34954021
Iskan Der
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП Delphi -> C++
Наверное что-то типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
class ExprParent : ExprClass
{
...
public:
    ExprParent(ExprClass *aSon) : ExprClass()
    {
        this->fSon = aSon; // ну или что тут должно делаться
    }
}
...
Рейтинг: 0 / 0
21.11.2007, 11:50
    #34954683
aspirin_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП Delphi -> C++
а почему нельзя так:
Код: 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
21.11.2007, 11:55
    #34954703
Iskan Der
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП Delphi -> C++
По С++ я не спец (давно не занимался этим делом). Предложенный вариант просто взял из книжки под рукой :) Да и вообще он вроде самый употребимый.
Насчет вашего варианта - а он работает? Если да, значит можно и так :)
...
Рейтинг: 0 / 0
21.11.2007, 12:10
    #34954789
aspirin_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП Delphi -> C++
Iskan DerПо С++ я не спец (давно не занимался этим делом). Предложенный вариант просто взял из книжки под рукой :) Да и вообще он вроде самый употребимый.
Насчет вашего варианта - а он работает? Если да, значит можно и так :)
Я то тем более не спец, поэтому и спрашиваю. Ладно спасибо за совет, будем пробовать :)
...
Рейтинг: 0 / 0
21.11.2007, 12:27
    #34954863
aspirin_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП Delphi -> C++
Еще один вопрос - если в производном классе есть метод с таким же именем и типом, как в базовом классе, например void SetCanvas(), надо ли его в базовом описывать как virtual?
...
Рейтинг: 0 / 0
21.11.2007, 13:27
    #34955142
Iskan Der
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП Delphi -> C++
aspirin_Еще один вопрос - если в производном классе есть метод с таким же именем и типом, как в базовом классе, например void SetCanvas(), надо ли его в базовом описывать как virtual?
Смотря чего хотите добиться :) Скажем:
Код: plaintext
1.
2.
3.
BaseClass *b = new DerivedClass();
b->setCanvas(...); // какой метод тут надо вызвать? с virtual вызовется DerivedClass::setCanvas, 
                          // без него - BaseClass::setCanvas
Еще не факт, но по-моему компилятор будет варнинги выдавать, если метод не virtual. А вообще, тут в С++ все так же, как и в Delphi :)
...
Рейтинг: 0 / 0
24.11.2007, 20:50
    #34963307
aspirin_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП Delphi -> C++
А если слово inherited не в конструкторе, а в другом методе, как тогда быть? Пример:
Код: plaintext
1.
2.
3.
4.
5.
 procedure TExprParent.DynaSetCanvas;
    begin
      inherited DynaSetCanvas;
      SetSonCanvas
    end;

Как это будет на C++ ?
...
Рейтинг: 0 / 0
25.11.2007, 02:26
    #34963436
daevaorn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП Delphi -> C++
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
27.11.2007, 00:14
    #34966746
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП Delphi -> C++
aspirin_Стоит задача - переделать прогу с Delphi на C++
В смысле - "с одного языка, который не знаете, на другой, который не знаете"? Это непросто... я бы посоветовал взять книжки по обоим. Между ними есть ряд нетривиальных различий, переводя без понимания, попадете... не туда, в общем.
...
Рейтинг: 0 / 0
28.11.2007, 18:21
    #34972931
Так_забежал_просто
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП Delphi -> C++
aspirin_Стоит задача - переделать прогу с Delphi на C++.
Пардон, а зачем?
...
Рейтинг: 0 / 0
28.11.2007, 21:20
    #34973246
aspirin_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП Delphi -> C++
softwarer
В смысле - "с одного языка, который не знаете, на другой, который не знаете"? Это непросто... я бы посоветовал взять книжки по обоим. Между ними есть ряд нетривиальных различий, переводя без понимания, попадете... не туда, в общем.
Один из языков (Delphi) я более или менее знаю, второй (C++) изучаю. Книжек по обоим языкам у меня в избытке, но не в каждой книжке доходчиво описано про то что я спрашиваю, по крайней мере пока я такую нашел только одну - С.Прата - Язык программирования C++. Лекции и упражнения.
Так_забежал_простоПардон, а зачем?
Затем что надо. Если конкретно, то по трем основным причинам: 1) проект подразумевает создание продукта на C++; 2) среда разработки проекта будет приобретена у мелкософта, а т.к. она не содержит Паскаль-компилятора, то выбор языка очевиден ; 3) так я лучше изучу C++ и ООП, чем просто читая книжки.
И вообще какая разница зачем? Мы здесь не философские вопросы обсуждаем а решаем конкретные вопросы по особенностям языков программирования.
...
Рейтинг: 0 / 0
28.11.2007, 22:00
    #34973281
SnowMan2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП Delphi -> C++
автор среда разработки проекта будет приобретена у мелкософта, а т.к. она не содержит Паскаль-компилятора, то выбор языка очевиден

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

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

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


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