Klassenvariablen Instanzvariablen
-
Hallo,
ich blätter gerade in einem Buch, wo die Rede von Klassenvariablen/Methoden sowie Instanzvariablen/Methoden ist.
Meinen die private und public?
-
Mit private und public legst du die Zugriffsmöglichkeiten auf deine Membervariablen und Methoden fest.
-
ich blätter gerade in einem Buch ...
Lesen ist besser.
-
Hallo,
Leider ist es in dem Buch wie mit vielen Büchern, die schreiben viel verwirrendes Zeugs ohne ein einfaches Beispiel.
Das mit dem public sowie private ist mir klar, was sind nun aber Klassenvariablen/Methoden sowie Instanzvariablen/Methoden?
#ifndef FILE1H #define FILE1H //--------------------------------------------------------------------------- class test { private: // Anwender-Deklarationen public: // Anwender-Deklarationen unsigned int c; unsigned int d; __fastcall test(unsigned int a,unsigned int b); unsigned int __fastcall mult(); }; #endif
#include "test.h" __fastcall test::test(unsigned int a,unsigned int b) { c = a; d = b; } //---------------------------------------------------------------- unsigned int __fastcall test::mult() { unsigned int e; e = c*d; return e; }
//--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { new_test = new test(20,20); Edit1->Text = new_test->mult(); } //---------------------------------------------------------------------------
Verstehe ich das richtig
a,b sind Instanzvariablen c,d sind Klassenvariablen?
-
War da nicht was mit dem Stichwort "static".
Ich würde mal danach googeln, das sollte helfen.Klassenvariablen können einmal an beliebigen Stellen genutzt werden, unabhängig
davon, ob eine konkrete Instanz der Klasse existiert oder nicht.
Mit anderen Worten – eine Klassenvariable ist über die Klasse oder eine Instanz davon
zugänglich. Eine Instanzvariable ist dagegen nur über ein Objekt verwendbar. Die konkrete
Anwendung erfolgt immer über ein Objekt.http://www.softwareacademy.de/JAVA/081 JAVA.htm
Das steht dort zwar für Java, aber es ist dennoch gut zu verstehen
-
-
norman_71 schrieb:
Danke, der Link hilft mir weiter.
-
Danke, der Link hilft mir weiter.
Mit freundlicher Unterstützung von Google ...
-
Mache ich es so, kommt die Linkerfehlermeldung
Unresolved external 'test::y' referenced from ... INSTANZVARIABLEN.OBJ
................................ 'test::x' .......................................................#ifndef FILE1H #define FILE1H class test { private: public: //------------------------------ // Klassenvariablen/Methoden //------------------------------ static unsigned int x; static unsigned int y; static unsigned int div(void); //------------------------------ // Instanzvariablen/Methoden //------------------------------ unsigned int c; unsigned int d; test(unsigned int a,unsigned int b); unsigned int mult(void); }; #endif
#include "test.h" test::test(unsigned int a,unsigned int b) { c = a; d = b; } //---------------------------------------------------------------- unsigned int test::mult(void) { unsigned int e; e = c*d; return e; } //---------------------------------------------------------------- unsigned int test::div(void) { unsigned int e; e = x/y; return e; }
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #pragma package(smart_init) #pragma resource "*.dfm" #include "instanzvariablen.h" #include "test.h" //--------------------------------------------------------------------------- TForm1 *Form1; test* new_test; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { new_test = new test(20,20); Edit1->Text = new_test->mult(); test::y = 10; test::x = 100; Edit2->Text = test::div(); }
-
Die Initialisierung muß außerhalb von Klassenfunktionen und unter Angabe des Typs erfolgen (wenn mein Gedächtnis mich nicht im Stich läßt
):
//--------------------------------------------------------------------------- TForm1 *Form1; unsigned int test::y = 10; unsigned int test::x = 100; test* new_test;
-
So gehts, soatwas macht man unter C mit extern obwohl das static dieses unter
C nicht zulässt, oder?
War da nicht was mit "keine Globalen Variablen".
Oder instanziere ich hier nur Zeiger auf die Klassenvariablen x,y.unsigned int test::y; unsigned int test::x; //--------------------------------------------------------------------------- TForm1 *Form1; test* new_test; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { new_test = new test(20,20); Edit1->Text = new_test->mult(); test::y = 10; test::x = 1000; Edit2->Text = test::div(); }
-
Dieser Thread wurde von Moderator/in Jansen aus dem Forum Borland C++ Builder (VCL/CLX) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.