Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Converting a 4 argument class to int?

  1. Mar 12, 2009 #1
    i was wondering whether it was possible to have a class say Vec4(i,j,,k,n) and then being able to assign it as an int

    eg/

    Vec4 A(i,j,k,1) = 1;


    does this make any sense?
     
  2. jcsd
  3. Mar 12, 2009 #2
    I'm not quite sure what language you're talking about (C,C++,C#?), but I think you can only check the return with "function = 1" unless you're setting a property in which case "A" is the property and "i,j,k,1" are the arguments.

    I only know VB well, so I can tell you that's the way it works in there.
     
  4. Mar 12, 2009 #3
    i am using visual basic, but i dont really understand what you are saying, do you reacon you could break it down a bit for me


    thanks
     
  5. Mar 12, 2009 #4
    Surely.

    I'm trying to wrap my head around what you're asking.

    What you typed, to my knowledge, will not work. If you can explain what you're trying to do, I can get a better idea of it.


    Note: I'm going to describe both the VB.Net version and VB6/VBA version of properties, feel free to skip the property stuff.

    Note2: If any of this is incorrect, please someone feel free to correct me, I don't know everything and only novice to intermediate expertise in .Net or VB6. In other words, someone confirm this for me. :redface:

    In property terms of what I was thinking you could do is something like this:
    Code (Text):
    'Random class/random function
    dim Vec4 as Class
    Vec4.A(i,j,k,l) = 1
     
    or you can check the return function

    Code (Text):
    'Random class/random function
    Dim Vec4 as Class
    if Vec4.A(i,j,k,l) = 1 then
    ...
    end if
     
    The property stuff:
    According to Wikipedia a property is a intermediary between a private member variable and the outside world. (Code examples from same link).

    VB6/VBA:
    Code (Text):
    ' in a class named clsPen
    Private m_Color As Long 'Private member variable
     
    Public Property Get Color() As Long 'Public reading function
        Color = m_Color
    End Property
     
    Public Property Let Color(ByVal RHS As Long) 'Public writing procedure
        m_Color = RHS
    End Property
     
    VB.Net:
    Code (Text):
    ' in a class named clsPen
    Private m_Color As Integer ' Private field
     
        Public Property Color As Integer ' Public property
            Get
                Return m_Color 'Public reading function
            End Get
            Set(ByVal Value As Integer)
                m_Color = Value 'Public writing procedure
            End Set
        End Property
     
    All you see as the developer when you're writing to clsPen.Color is:
    Writing:
    Code (Text):
     clsPen.Color=4
    Reading:
    Code (Text):
     A = clsPen.Color
    As mentioned in the link, properties adds a level abstractness between the outside code and the private member, so you can actually check to make sure that the value passed is within a range or is a color. You can do this by using built in functions or outside functions.

    Validating information to set is a number:
    Valdidating in VB6/VBA:
    Code (Text):
    ' in a class named clsPen
    Private m_Color As Long 'Private member variable
     
    Public Property Get Color() As Long 'Public reading function
        Color = m_Color
    End Property
     
    Public Property Let Color(ByVal RHS As Object) 'Public writing procedure
    'Long changed to object to allow more abstractness to what is sent to it
    ' without throwing error, not necessarily correct, but shows the functionality
    ' of the Let statement
        If IsNumeric(m_Color) then m_Color = RHS
        'Or
        'If TypeName(m_Color) = "Long" then m_Color = RHS
    End Property
    Validating in VB.Net:
    Code (Text):
    ' in a class named clsPen
    Private m_Color As Integer ' Private field
     
        Public Property Color As Object' Public property
            Get
                Return CObj(m_Color) 'Public reading function
    '(CObj converts the integer to an Object)
            End Get
            Set(ByVal Value As Object)'Public writing procedure
                If IsNumeric(Value) then m_Color = Value
                'Or the more proper way
                'If TypeOf(Value) Is Integer then m_Value = Value
    'TypeOf is better than TypeName (imho) because TypeOf is
    ' returning the value to be compared against a static value
    ' rather than the string name. I use TypeOf all the time to
    ' verify things in control loops. Remember use "Is" between
    ' objects and "=" between everything else to verify it
            End Set
        End Property


    Also, using properties you can make a property read only or write only.
    Read only in VB6/VBA:
    Code (Text):
    ' in a class named clsPen
    Private m_Color As Long 'Private member variable
     
    Public Property Get Color() As Long 'Public reading function
        Color = m_Color
    End Property
    Write only in VB6/VBA:
    Code (Text):
    ' in a class named clsPen
    Private m_Color As Long 'Private member variable
     
    Public Property Let Color(ByVal RHS As Long) 'Public writing procedure
        m_Color = RHS
    End Property
    Read only in VB.Net:
    Code (Text):
    ' in a class named clsPen
    Private m_Color As Integer ' Private field
     
        Public ReadOnly Property Color As Integer ' Public property
            Get
                Return m_Color 'Public reading function
            End Get
        End Property
    Write only in VB.Net
    Code (Text):
    ' in a class named clsPen
    Private m_Color As Integer ' Private field
     
        Public WriteOnly Property Color As Integer ' Public property
            Set(ByVal Value As Integer)'Public writing procedure
                m_Color = Value
            End Set
        End Property
    HTH
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook