const in class

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Mathias
Beiträge: 6938
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

const in class

Beitrag von Mathias »

Kann man in einer class auch eine static Konstante deklarieren ?

Ohne static würde es funktionieren.

Code: Alles auswählen

type
  TTest = class(TObject)
  public
    const i: integer = 5; static; // wie geht dies ?
  end;   
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: const in class

Beitrag von Scotty »

Der Reference guide zu fpc ist gar nicht so schlecht. Da steht u.a.
http://lazarus-ccr.sourceforge.net/fpcdoc/ref/refse30.html#x66-740006.1 hat geschrieben:Similar to objects, if the {$STATIC ON} directive is active, then a class can contain static fields: these fields are global to the class, and act like global variables, but are known only as part of the class. They can be referenced from within the classes’ methods, but can also be referenced from outside the class by providing the fully qualified name.

For instance, the output of the following program:
{$mode objfpc}
{$static on}
type
cl=class
l : longint;static;
end;
...
Was du haben willst, wird wohl eher eine typisierte Konstante sein (also deine funktionierende Variante), die dann aber nicht statisch wäre.

Mathias
Beiträge: 6938
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: const in class

Beitrag von Mathias »

Wie kann ich str4 einen Startwert zuordnen ?
Ich könnte es im Constructor machen, aber wen es anderst geht will ich das nicht.

Bei str2 geht es, nur verhält sich die Variable wie eine static deklarierte, so wie str1.
Bei {$J-} kann man str2 später nicht mehr ändern.

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils;
 
type
  TTest = class(TObject)
  private
    i: integer;
    class var
    str1: string;
  const
    str2: string = '1234';
  var
    str3: string;
//    str4: string = '1234'; // geht nicht
  public
    constructor Create(s: string);
    procedure Ausgabe;
  end;
 
implementation
 
constructor TTest.Create(s: string);
begin
  inherited Create;
  str1 := s;
  str2 := s;
  str3 := s;
end;
 
procedure TTest.Ausgabe;
begin
  Writeln(str1, ' - ', str2, ' - ', str3);
end;
 
end.      
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: const in class

Beitrag von Socke »

Mathias hat geschrieben:Wie kann ich str4 einen Startwert zuordnen ?
Ich könnte es im Constructor machen, aber wen es anderst geht will ich das nicht.
In Pascal ist die einzige vorgesehene Möglichkeit der Construktor. Der wurde extra für solche Aufgaben erfunden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten