При настройке этих функций эти функции создают новую пустую структуру ComNum каждый раз, когда вы вызываете их (с именем add или subt в зависимости от имени функции).Если вы не вернете их вручную раньше, по умолчанию будет возвращена функция с именем struct.
Function add(ByVal br As ComNum) As ComNum
add.Re = br.Re + Re
add.Im = br.Im + Im
End Function
В основном делает эквивалент:
Dim add As New ComNum
add.Re = br.Re + Re
add.Im = br.Im + Im
Return add
Хотя, как заметил Ларс, яне уверен, почему вы хотите, чтобы это была функция против подпрограммы.Чтобы использовать его в том виде, в котором вы его настроили, теперь вам нужно сделать что-то подобное, чтобы получить значения сложения / вычитания, потому что вам нужно захватить возвращенный объект ComNum.
Dim a As New ComNum With {.Im = 1, .Re = 1}
'Im = 6, Re = 6
a = a.add(New ComNum With {.Im = 5, .Re = 5})
Делать что-то подобное имеет больше смысла дляme.
Structure ComNum
Dim Re As Double
Dim Im As Double
Sub add(ByVal br As ComNum)
Re += br.Re
Im += br.Im
End Sub
Sub subt(ByVal br As ComNum)
Re -= br.Re
Im -= br.Im
End Sub
End Structure
Тогда вы можете просто назвать его так, чтобы обновить структуру без необходимости перехвата возвращаемых значений.
a.add(New ComNum With {.Im = 5, .Re = 5})
Редактировать: Зная больше сейчас, как предполагается упражнениечтобы быть выполненным, я бы предложил что-то вроде этого для структуры:
Public Overrides Function ToString() As String
Return String.Format("Re: {0} Im: {1}", Re, Im)
End Function
Затем вы можете вызвать метод .ToString () следующим образом.Хотя, просто мысль.
Console.WriteLine("The second number added twice and subtracted once from the first number gives {0}", c.ToString())