Konstruktory w językach C++, C# i Java zajmują się początkowym ustawianiem prywatnych pól obiektu. W językach Objective-C i Ruby ich rolę przejmują inicjalizatory.
W pliku nagłówkowym:
class Instrument
{
...
public:
Instrument();
Instrument(const Instrument&);
~Instrument();
};
W pliku z implementacją:
Instrument::Instrument() : identifier(count++)
{
productionDate = 0;
}
Instrument::Instrument(const Instrument& instrument) : identifier(count++)
{
productionDate = instrument.productionDate;
}
Instrument::~Instrument()
{
count--;
}
Każda klasa w Objective-C kaskadowo dziedziczy po klasie—korzeniu (NSObject) metodę init
. Jej składnia wygląda jak poniżej.
Istotnym detalem jest to, jak wewnątrz klasy odwołujemy się do zmiennych zadeklarowanych jako @properties. Dla odróżnienia od zwykłych zmiennych prywatnych, rozpoczynamy je od znaku podkreślnika (_
).
- (instancetype) init
{
self = [super init];
if (self)
{
_identifier = count++;
_productionDate = 0;
}
return self;
}
public class Instrument
{
...
public Instrument()
{
identifier = count++;
productionDate = 0;
}
public Instrument(Instrument instrument)
{
identifier = count++;
productionDate = instrument.productionDate;
}
protected void finalize()
{
count--;
}
}
class Instrument
{
...
public Instrument()
{
identifier = 0;
productionDate = 0;
count++;
}
public Instrument(Instrument instrument)
{
identifier = count++;
productionDate = instrument.PRUDUCTIONDATE;
}
~Instrument()
{
count--;
}
}
W Ruby mamy podobne rozwiązanie co w Objective-C. Do zmiennych klasy odwołujemy się z prefiksem @@
, a do zmiennych obiektu z @
.
class Instrument
...
def initialize
@@count += 1
@identifier = @@count
@production_date = 0
end
end