2016-02-03 6 views
0

У меня есть класс VBA:Как объявить нестандартный массив классу?

Option Explicit 

Public Re As Double 'Real 
Public Im As Double 'Imaginary 


Public Function CZ_Sqt(Z As Complex, Exp As Integer) As Variant 
    Dim Table() As Complex 
    Dim i As Integer 

    If Exp > 0 Then 
     ReDim Preserve Table(0 To Exp - 1) 
     Set Table(UBound(Table)) = New Complex 

    Else: Exit Function 
    End If 

    For i = 0 To UBound(Table) 
     Table(i).Re = 1 
     Table(i).Im = 1 
    Next i 
    set CZ_Sqt = Table 

End Function 

В модуле:

Sub asd() 
    Dim K As Complex 
    Dim A As Variant 

    Set K = New Complex 


    K.Re = 1 
    K.Im = 3 
    Set A = K.CZ_Sqt(Z, 5) 
end sub 
  1. Как "установить" все переменную "Таблица" в на этапе? В решении, которое в примере установлено только элемент Table (4), но другие элементы опущены.
  2. Как вернуть эту переменную «Таблица» к имени функции «CZ_Sqt»? Это то, что я предложил, не работает.
  3. Как передать переменную «CZ_Sqt», которая рассматривает тип массива Array для переменной «A»?

ответ

0

Вы используете тот же класс, что и объект и объект.

Я бы отделить функциональные возможности в 2-х классов:

  • комплекс
  • ComplexCollection - Содержит коллекцию сложного класса

EDIT: Там нет дубликата проверки в ComplexCollection.Add и существует проверьте ComplexCollection.Retrieve.

комплекс

Option Explicit 

Public Re As Double 
Public Im As Double 

ComplexCollection

Option Explicit 

Dim oCol As Collection 

Public Function Create(pRe As Double, pIm As Double) As Complex 
    Dim oResult As Complex 
    Set oResult = New Complex 
    oResult.Re = pRe 
    oResult.Im = pIm 

    Set Create = oResult 
End Function 

Public Sub Add(pComplex As Complex, pKey As String) 
    oCol.Add pComplex, pKey 
End Sub 

Public Function Retrieve(pKey As String) As Complex 
    Set Retrieve = oCol(pKey) 
End Function 

Private Sub Class_Initialize() 
    Set oCol = New Collection 
End Sub 

Private Sub Class_Terminate() 
    Set oCol = Nothing 
End Sub 

Test.bas

Public Sub TestCollection() 
    Dim oCL As ComplexCollection 
    Dim oC As Complex 

    Set oCL = New ComplexCollection 

    Set oC = oCL.Create(1, 2) 
    Debug.Print oC.Im, oC.Re 

    oCL.Add oC, "1" 

    Set oC = Nothing 
    Set oC = oCL.Retrieve("1") 

    Debug.Print oC.Im, oC.Re 

End Sub 
Смежные вопросы