Thuis
Contacten

    Hoofdpagina


Programmeren in C++ voor beginners

Dovnload 5.04 Mb.

Programmeren in C++ voor beginners



Pagina47/49
Datum25.10.2017
Grootte5.04 Mb.

Dovnload 5.04 Mb.
1   ...   41   42   43   44   45   46   47   48   49

Volgende week


Nu we weten wat een constructor is, zullen we de constructor van ons Form bekijken, aanpassen en meerdere Forms gaan aanmaken. Ook gaan we een platform-onafhankelijke Console Applicatie maken en kennismaken met de std::string.
  1. Dag 8





Een mogelijk eindprogramma van vandaag.
Vandaag leren we met meerdere Forms werken, de constructor van een Form te wijzigen en hoe we een Console Applicatie maken.
    1. De TForm1 constructor

Ons Form is ook een klasse. De naam van de klasse is te zien in de Object Inspector. Standaard is dit TForm1.




De Object Inspector laat ons zien dat ons Form de naam Form1 heeft en van het data type TForm1 is.
Nu we de klassenaam van ons Form weten, kunnen we de constructoren bekijken.


Class Browing laat ons de twee constructors van TForm1 zien
TForm1 heeft twee constructors:

* 'TComponent * Owner': een TComponent* die de beheerder wordt van het nieuwe TForm1.

* 'const TForm1&': een copy constructor.
De eerste constructor kan ons bekend voorkomen. Deze hebben we altijd al in Unit1.cpp gehad:
__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{
}
De declaratie van deze constructor staat in Unit1.h.
Je kunt de constructor van TForm1 ook argumenten erbij geven, als je dit in zowel Unit1.cpp en Unit1.h wijzigd. Als we een TForm aan kunnen maken (staat hieronder), dan leren we deze constructor aan te passen.

    1. Een TForm aanmaken

Onderstaande poging om door een druk op een TButton een nieuw Form aan te maken en te tonen lukt niet:


void __fastcall TForm1::Button1Click(TObject *Sender)

{

TForm1 f; //Lukt niet



f.Show();

}
[C++ Error] Unit1.cpp(20): E2459 VCL style classes must be constructed using operator new


Door F1 op de foutmelding te doen, verschijnt de Help:
E2459 Delphi style classes must be constructed using operator new Compiler error
Delphi style classes cannot be statically defined. They have to be constructed on the heap.
Example:
void foo(void)

{

Tobject o1; // Error;



Tobject *o2 = new TObject();

}
Deze Help is blijkbaar uit Delphi (het Windows en Pascal zusje van Kylix) gehaald.


Dankzij deze informatie, wordt de volgende manier geprobeerd:
void __fastcall TForm1::Button1Click(TObject *Sender)

{

TForm1 * f = new TForm1();



f->Show();

}
De volgende fout treedt op:


[C++ Error] Unit1.cpp(20): E2285 Could not find a match for 'TForm1::TForm1()'
Inderdaad, we hebben gezien dat TForm1 in de constructor een 'TComponent* Owner' mee moet krijgen. Ons Form is gelukkig ook een TComponent pointer:
void __fastcall TForm1::Button1Click(TObject *Sender)

{

TForm1 * f = new TForm1(this);



f->Caption = "Ik ben nieuw";

f->Show();

}
Merk het volgende op:

* We hebben zojuist onze eerste pointer aangemaakt. Dit doe

je met new. Alleen om een Form te laten verschijnen leren

we new. De enige andere reden om met pointers te werken,

is om polymorfisme te gebruiken. Polymorfisme gaat te ver

voor deze cursus.

* Het keyword this laat een klasse een pointer naar

zichzelf geven. Een TForm1 pointer in dit geval.

* De constructor van TForm1 heeft een TComponent pointer

nodig, maar krijgt een TForm1 pointer binnen. Dit komt

omdat TForm1 een afgeleide ('derived') klasse is van

TComponent. Dit wordt overerving ('inheritance') genoemd

en gaat te ver voor deze cursus.

* De pointer wordt niet gedelete. Dit is, omdat de Owner

(in dit geval this) ervoor zorgt dat delete op het juiste

moment wordt aangeroepen.




Class Browsing laat zien dat een TForm1 ook TComponent methoden en Properties heeft.

1   ...   41   42   43   44   45   46   47   48   49

  • De TForm1 constructor
  • Een TForm aanmaken

  • Dovnload 5.04 Mb.