Field properties |
Top Previous Next |
What is translated > Properties > Field properties The following example is taken from the Embarcadero documentation:
type THeading = 0..359; TCompass = class(TControl) private FHeading: THeading; procedure SetHeading(Value: THeading); published Property Heading: THeading read FHeading write SetHeading; // ... end;
C++Builder
For C++Builder the"__property" key word is a counterpart to the Delphi properties. With that the code snippet above becomes to:
typedef int /*0..359*/ THeading;
class TCompass : public TControl { typedef TControl inherited;
private: THeading FHeading; void __fastcall SetHeading(THeading Value); __published: __property THeading Heading = { read = FHeading, write = SetHeading }; // ... };
Visual C++
Visual C++ also has compiler specific properties:
__declspec( property( get=get_func_name, put=put_func_name ) ) declarator
While in Delphi and for C++Builder the field can be set simply after the read or write specifier, Visual C++ needs functions for for the corresponding get and put specifiers. If in the original Delphi code a field is used, Delphi2Cpp creates an according function for it, as described for other compilers below. Such functions also are created, if the original access function is private - as in the example - or protected or if the type of the property is an array and for indexed properties.
class TCompass : public TControl { typedef TControl inherited;
private: THeading FHeading; void SetHeading(THeading Value); public: /*property Heading : THeading read FHeading write SetHeading;*/ THeading ReadPropertyHeading() { return FHeading;} void WritePropertyHeading(THeading Value){SetHeading(Value);} __declspec(property(get = ReadPropertyHeading, put = WritePropertyHeading)) THeading Heading; // ... };
In Visual C++ base class properties can be used in derived classes too, which in Delphi has to be declared explicitly.
Other compilers
For other compilers.properties are eliminated. The read and write specifications are replaced by two functions whose names are derived from the name of the original property. As default the expression ReadProperty or WriteProperty is put in front of this name respectively. You can change these prefixes in the option dialog.
class TCompass : public TControl { typedef TControl inherited;
private: THeading FHeading; void SetHeading(THeading Value); public: /*property Heading : THeading read FHeading write SetHeading;*/ THeading ReadPropertyHeading() { return FHeading;} void WritePropertyHeading(THeading Value){SetHeading(Value);} // ... };
The fields or methods, which originally were set in the property are now accessed via these functions. While the visibility of these fields or methods usually is private or protected, the access functions which are created by Delphi2Cpp 2.x are public. In the ReadProperty function the originally field is returned or a call of the original return function is carried out. In the WriteProperty function the assignment to the original field is carried out and the parameters are passed to the originally method.
At all places in the remaining code where a property is read, the ReadProperty function is used and the WriteProperty function is called in all places, where originally a value is assigned to a property.
if Compass.Heading = 180 then GoingSouth; Compass.Heading := 135; -> if(Compass->ReadPropertyHeading() == 180) GoingSouth(); Compass->WritePropertyHeading(135);
|
This page belongs to the Delphi2Cpp Documentation |
Delphi2Cpp home Content |