
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.5] |
![]() |
|
Страницы: (117) « Первая ... 49 50 [51] 52 53 ... 116 117 ( Перейти к последнему сообщению ) |
Сообщ.
#751
,
|
|
|
Цитата Allexx @ Я имел ввиду, что например С не вмешивается в код написанный программистом (за исключением оптимизаций, которые можно отключить). да ну? ![]() ![]() class A { public: static unsigned int i; A (const A&) { ++i; } A () { } }; unsigned int A::i = 0; A f (A& a) { return a; } A ff (A& a) { return f (a); } A fff (A& a) { return ff (a); } int main () { A a = fff (A ()); std::cout << A::i; } каков будет результат?? и где написано что эту оптимизацию можно отключить? |
Сообщ.
#752
,
|
|
|
Сообщ.
#753
,
|
|
|
ага... детали реализации, аж 3 раза... палец даю на отсечение, что writeln(10,10,'1234'); заменяется компилером на чегото типа intwrite(10); intwrite(10); strwrite('1234'); и это не есть вмешательство?? а компилер С, ничего не подменяет, компилит всё как есть, дословно можно сказать. |
Сообщ.
#754
,
|
|
|
Цитата Allexx @ а компилер С, ничего не подменяет, компилит всё как есть, дословно можно сказать. откуда такая уверенность? твои дагадки, лишь ими и остаются. Магии в С не меньше, а в С++ и больше в разы. |
Сообщ.
#755
,
|
|
|
Цитата Allexx @ а компилер С, ничего не подменяет, компилит всё как есть, дословно можно сказать. во.. еще лучше пример дословного компилирования меня даже удивил релультат моего компилятора ![]() ![]() ![]() class A { public: static unsigned int i; A (const A&) { ++i; } A () { } }; unsigned int A::i = 0; int main () { A a = A (A (A (A (A (A (A (A (A (A (A (A ()))))))))))); std::cout << A::i; } Добавлено Цитата Smike @ Ну по большому счету Break & Continue тоже только с виду процедуры. Чтобы заявить, что это процедуры — нужно показать их реализацию. а.. можно взять их адрес? (дельфи я не знаю, как и паскаль) |
Сообщ.
#756
,
|
|
|
Цитата Allexx @ палец даю на отсечение, что writeln(10,10,'1234'); заменяется компилером на чегото типа Модуль System глянь, ага? |
![]() |
Сообщ.
#757
,
|
|
Цитата Smike @ Модуль System глянь, ага? ты про это: Цитата ? unit System; { Predefined constants, types, procedures, } { and functions (such as True, Integer, or } { Writeln) do not have actual declarations.} { Instead they are built into the compiler } { and are treated as if they were declared } { at the beginning of the System unit. } |
Сообщ.
#758
,
|
|
|
Там есть:
![]() ![]() function _WriteRec(var f: TFileRec; buffer: Pointer): Pointer; function _WriteChar(var t: TTextRec; c: Char; width: Integer): Pointer; function _Write0Char(var t: TTextRec; c: Char): Pointer; function _WriteBool(var t: TTextRec; val: Boolean; width: Longint): Pointer; function _Write0Bool(var t: TTextRec; val: Boolean): Pointer; function _WriteLong(var t: TTextRec; val, width: Longint): Pointer; function _Write0Long(var t: TTextRec; val: Longint): Pointer; function _WriteString(var t: TTextRec; const s: ShortString; width: Longint): Pointer; function _Write0String(var t: TTextRec; const s: ShortString): Pointer; function _WriteCString(var t: TTextRec; s: PChar; width: Longint): Pointer; function _Write0CString(var t: TTextRec; s: PChar): Pointer; function _Write0LString(var t: TTextRec; const s: AnsiString): Pointer; function _WriteLString(var t: TTextRec; const s: AnsiString; width: Longint): Pointer; function _Write0WString(var t: TTextRec; const s: WideString): Pointer; function _WriteWString(var t: TTextRec; const s: WideString; width: Longint): Pointer; function _WriteWCString(var t: TTextRec; s: PWideChar; width: Longint): Pointer; function _Write0WCString(var t: TTextRec; s: PWideChar): Pointer; function _WriteWChar(var t: TTextRec; c: WideChar; width: Integer): Pointer; function _Write0WChar(var t: TTextRec; c: WideChar): Pointer; function _WriteVariant(var T: TTextRec; const V: TVarData; Width: Integer): Pointer; function _Write0Variant(var T: TTextRec; const V: TVarData): Pointer; Так что так и есть. ![]() ![]() |
Сообщ.
#759
,
|
|
|
Цитата Smike @ Там есть: ![]() ![]() function _WriteRec(var f: TFileRec; buffer: Pointer): Pointer; function _WriteChar(var t: TTextRec; c: Char; width: Integer): Pointer; function _Write0Char(var t: TTextRec; c: Char): Pointer; function _WriteBool(var t: TTextRec; val: Boolean; width: Longint): Pointer; function _Write0Bool(var t: TTextRec; val: Boolean): Pointer; function _WriteLong(var t: TTextRec; val, width: Longint): Pointer; function _Write0Long(var t: TTextRec; val: Longint): Pointer; function _WriteString(var t: TTextRec; const s: ShortString; width: Longint): Pointer; function _Write0String(var t: TTextRec; const s: ShortString): Pointer; function _WriteCString(var t: TTextRec; s: PChar; width: Longint): Pointer; function _Write0CString(var t: TTextRec; s: PChar): Pointer; function _Write0LString(var t: TTextRec; const s: AnsiString): Pointer; function _WriteLString(var t: TTextRec; const s: AnsiString; width: Longint): Pointer; function _Write0WString(var t: TTextRec; const s: WideString): Pointer; function _WriteWString(var t: TTextRec; const s: WideString; width: Longint): Pointer; function _WriteWCString(var t: TTextRec; s: PWideChar; width: Longint): Pointer; function _Write0WCString(var t: TTextRec; s: PWideChar): Pointer; function _WriteWChar(var t: TTextRec; c: WideChar; width: Integer): Pointer; function _Write0WChar(var t: TTextRec; c: WideChar): Pointer; function _WriteVariant(var T: TTextRec; const V: TVarData; Width: Integer): Pointer; function _Write0Variant(var T: TTextRec; const V: TVarData): Pointer; Так что так и есть. ![]() ![]() Smike, а полиморфизм в Delphi есть? |
Сообщ.
#760
,
|
|
|
Цитата Alex Forth @ Smike, а полиморфизм в Delphi есть? А почему бы ему не быть? ![]() И кстати! Цитата Класс может наследовать функциональность от нескольких классов. Это называется множественным наследованием. Множественное наследование создаёт известную проблему (в C++), когда класс наследуется от нескольких классов-посредников, которые в свою очередь наследуются от одного класса. Если метод общего предка был переопределён в посредниках, неизвестно, какую реализацию метода должен наследовать общий потомок. Решается эта проблема путём отказа от множественного наследования для классов и разрешением множественного наследования для полностью абстрактных классов (т. н. интерфейсов) (C#, Delphi, Java). Википедия |
Сообщ.
#761
,
|
|
|
Цитата Alex Forth @ Smike, а полиморфизм в Delphi есть? Да тут не полиморфизм, а простая перегрузка нужна... Цитата Smike @ Если метод общего предка был переопределён в посредниках, неизвестно, какую реализацию метода должен наследовать общий потомок. К чему цитата? ![]() Да, попытка использовать неквалифицированное имя метода приведет к ошибке времени компиляции. А в чем проблема? |
Сообщ.
#762
,
|
|
|
Цитата Smike @ Цитата Alex Forth @ Smike, а полиморфизм в Delphi есть? А почему бы ему не быть? ![]() Стоит посмотреть на список _WriteXXX и по этому поводу закрадываются сомения ![]() Напомни, плз, как в Delphi обстоят дела с переменным числом аргументов для функции? Помойму паскаль такого неумеет. |
![]() |
Сообщ.
#763
,
|
|
Цитата Smike @ А почему бы ему не быть? Alex Forth имел в виду перегрузку. |
Сообщ.
#764
,
|
|
|
Цитата Smike @ Класс может наследовать функциональность от нескольких классов. Это называется множественным наследованием. Множественное наследование создаёт известную проблему (в C++), когда класс наследуется от нескольких классов-посредников, которые в свою очередь наследуются от одного класса. Если метод общего предка был переопределён в посредниках, неизвестно, какую реализацию метода должен наследовать общий потомок. Решается эта проблема путём отказа от множественного наследования для классов и разрешением множественного наследования для полностью абстрактных классов (т. н. интерфейсов) (C#, Delphi, Java). Написан бред как обычно). особено решение проблемы - класс. Решается проблема строительства дома из бумаги - путем отказа от бумаги и замена бумаги деревом ![]() Реально - проблема решается, хотя такой проблемы в принципе не существует, так как в цитате написан бред. Цитата Если метод общего предка был переопределён в посредниках, неизвестно, какую реализацию метода должен наследовать общий потомок. он наследует ВСЁ что есть у базовых классоа. Обе реализации! если их две! Просто аффтар не знал С++. А проблема видимо в том что если просто вызвать такую функцию - то будет неоднозначность.. какую именно функцию вызывать.. проблема решается просто, и кстати для этой проблемы вообще не одязятелен общий предок. покажу одно из возможных решений проблемы - сокрытие имен ![]() ![]() class C : public B1, public B2 { public: void f ()//предполагается что f () определена и в B1 и в B2 { B2::f (); } }; int main () { C c; c.f (); } Добавлено также можно использовать полностью квалифицированные имена. Добавлено еще проблема решается ![]() ![]() public: using B2::f; |
Сообщ.
#765
,
|
|
|
Цитата LuckLess @ особено решение проблемы - класс. у интерфейса нет рализации, следовательно кроме сигнатуры ничего не наследуется, а значит нет неоднозначности в вызове. Цитата LuckLess @ Реально - проблема решается, хотя такой проблемы в принципе не существует, так как в цитате написан бред. А если метод не один? А несколько и для всех писать "пояснялку" компилятору в любой из форм? |