Sample code:
MyItemType a;
MyItemType b;
a.someNumber = 5;
b = a;
cout << a.someNumber << endl;
cout << b.someNumber << endl;
b.someNumber = 10;
cout << a.someNumber << endl;
cout << b.someNumber << endl;
The output:
5
5
5
10
If a and b were reference types, the last 2 lines would have been 10 and 10 instead of 5 and 10 I guess.
Does this mean when you do a declaration like this:
AClassType anInstance;
it is treated like a value type?
——Here is MyItemType.h————
#ifndef MYITEMTYPE_H
#define MYITEMTYPE_H
class MyItemType{
public:
int someNumber;
MyItemType();
};
MyItemType::MyItemType(){
}
#endif /* MYITEMTYPE_H */
It is not treated like a value type, in fact it is.
While in Java object variables store references to objects, in C++ there is an important difference between an object and its reference. Assignment is by default really by value.
If you want a variable to be just a reference, you use either a reference or a pointer type, depending what you want to with it. These types are declared
T*andT&.To illustrate this a little more:
In Java, when you say
MyClass obj, an object is created, but a reference/pointer is stored in the variableobj.In C++,
MyClass objcreates the object and will stored it inobj. If you want to work with references/pointers, you need to declare variables explicity asMyClass* objPointerorMyClass& objReference.