Avatar billede gotcha Nybegynder
09. juli 2004 - 15:08 Der er 4 kommentarer og
1 løsning

Constructor til klasse

Jeg er i gang med at sætte mig ind i klasser i Excel VBA, og så tænkte jeg på, hvordan jeg får adgang til constructoren for klassen?

Givet klassen clsCircle (der beskriver en cirkel):

Option Explicit

'declare properties
Private mX As Double
Private mY As Double
Private mRadius As Double

'constructor
Private Sub clsCircle_Initialize(dblX As Double, dblY As Double, dblRadius As Double)

    'store
    mX = dblX
    mY = dblY
    mRadius = dblRadius
   
    MsgBox ("instants oprettet")

End Sub

'set the x-coordinate
Public Property Let X(ByVal dblX As Integer)

    mX = dblX

End Property

'set the y-coordinate
Public Property Let Y(ByVal dblY As Integer)

    mY = dblY

End Property

'set radius
Public Property Let Radius(ByVal dblRadius As Double)

    mRadius = dblRadius

End Property

'get area
Public Property Get Area() As Double

    Area = 3.14 * mRadius * mRadius

End Property

Så bliver jeg nødt til først at instantiere den, derefter definere X, Y og Radius hver for sig. Hvordan får jeg ordnet klassen, så jeg f.eks. bare kan skrive

Dim c as clsCircle

Set c = new clsCircle(5,10,5)

?

Altså så jeg får en klasse med koordinater (5,10) og radius 5

Mvh Morten
Avatar billede kedde65 Praktikant
10. juli 2004 - 01:57 #1
Hverken VB 6.0 eller VB A er fuldt ud objekt orienteret, og en af de ting der gør at det ikke er fuldstændigt er manglen på konstruktor. Så derfor det du vil, kan faktisk ikke lade sig gøre - Desværre...

VH CK
Avatar billede martin_moth Mester
14. juli 2004 - 14:11 #2
Mig, der kun kender VB og VBA, men ikke fx. C++ og andre "ægte" objektorienterede sprog, er da ret nysgerrig efter at vide hvad en constructor egentligt er..?
Avatar billede gotcha Nybegynder
16. juli 2004 - 23:45 #3
Når du instantierer en klasse, så er constructoren en metode med samme navn som klassen, der kaldes automatisk. Dermed kan man f.eks. skrive:

Dim c as clsCircle

c = new Circle(5,5,20)

hvilket vil give mig en cirkel i (5,5) med radius 20. Da der ikke findes en constructor, så er man nødt til først at instantiere den og derefter kalde en funktion, f.eks.

Dim c as clsCircle

Set c = New clsCircle

Call c.init(5,5,20)

Altså snakker vi groft sagt om, at man bliver nødt til at bruge en hel linje ekstra, men det er jo stadigvæk irriterende ;)

Mvh Morten
Avatar billede gotcha Nybegynder
16. juli 2004 - 23:46 #4
Vil lige sige tak til kedde65 for at opklare det, og så ellers lukke dette spørgsmål...
Avatar billede martin_moth Mester
19. juli 2004 - 08:25 #5
Ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester