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

C++ Variable carrying

Tags:
  1. Aug 2, 2015 #1
    I am just getting into C++ and I would like to ask you guys for some help regarding transferring variables form one function to another. Is there any way I can declare a variable such that it can be referenced and changed throughout all the programs functions? Thanks.
     
  2. jcsd
  3. Aug 2, 2015 #2

    Orodruin

    User Avatar
    Staff Emeritus
    Science Advisor
    Homework Helper
    Gold Member

    You can always declare global variables, although this is quite ugly. Better is to pass an argument by reference to a function you call.
     
  4. Aug 2, 2015 #3

    jtbell

    User Avatar

    Staff: Mentor

    Believe me, if you try to write serious code (i.e. a program of non-trivial size that includes a non-trivial number of functions), that uses global variables, when it comes time for someone else to fix a bug or add a feature to it, they will want to string you up by your thumbs, douse you with some sugary soft drink, and set a bucket full of fire ants loose on you. I speak from experience here. :mad:

    Learn about pass-by-value and pass-by-reference. If you find yourself passing a lot of related data back and forth between functions, that's a sign that you should think carefully about your overall program structure, and consider using classes (objects) or structs to bundle things together.
     
  5. Aug 2, 2015 #4

    jedishrfu

    Staff: Mentor

    This is also the reason that functional programming is so appealing. Functions have no side effects ie changing global variables. Its harder to write the code but youll be able to track how your data flows through your code.
     
  6. Aug 3, 2015 #5

    FactChecker

    User Avatar
    Science Advisor
    Gold Member

    An important concept of C++ and object oriented programming is that there is one class that "owns" a piece of information. If other parts of the program want to change that data, they must call a method of the owning class. That way, the owning class can control changes. Unfortunately, I have seen this carried to ridiculous lengths.

    There are simple ways to make data globally accessible. A variable declared outside of any "{}" brackets is accessible to any function defined in that file and is also accessible to linked programs unless it is declared 'static'. You can make entire structures of data available to all programs. This places the responsibility on the programmers to use the access wisely. As others have said, you might be disappointed.
     
    Last edited: Aug 3, 2015
  7. Aug 4, 2015 #6
    Thanks I will learn that.
     
  8. Aug 4, 2015 #7
    Thank you, I appreciate it.
     
  9. Aug 4, 2015 #8
    Thanks, I appreciate the input.
     
  10. Aug 4, 2015 #9
    The modern way to do a global variable is to use a singleton.

    Globals:

    main.c
    Code (Text):
    #include "other.h"
    int myIntVariable = 1;
    int main(){
         int result = other_func(5);
         return 0;
    }
    other.h
    Code (Text):
    #ifndef __OTHER_H
    #define __OTHER_H

    int other_func(int var);

    #endif
    other.c
    Code (Text):
    #include "other.h"
    extern int myIntVariable;
    int other_func(int var){
       int result = var * myIntVariable;
       myIntVariable = var;
       return result;
    }

    Singletons:

    main.cpp
    Code (Text):
    #include "other.h"

    int main(){
         int result = other::func(5);
         return 0;
    }
    other.h
    Code (Text):
    #ifndef __OTHER_H
    #define __OTHER_H

    class other {
    public:
         static int & myIntVariable();
         static int func(int var);
    };
    #endif
    other.cpp
    Code (Text):
    #include "other.h"
    int & other::myIntVariable(){
         static int myVar = 1;
         return myVar;
    }

    int other::func(int var){
       int result = var * myIntVariable();
       myIntVariable() = var;
       return result;
    }
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: C++ Variable carrying
  1. C++ function variables (Replies: 12)

Loading...