Re: Create Global Function and Class
Immortal Nephi <Immortal_Nephi@hotmail.com>, on 24/08/2010 08:23:23, wrote:
I need to follow best practice guideline how to design my code
correctly. I have to decide which either global function or class can
be chosen.
I will use global function if global function is available to all
file scopes or is in namespace scope. I need to avoid data
modification when necessary.
I can write good global function.
int gFunc( int x, int y ) {
// Do something
// ?.
return z;
}
If I have to modify either x or y in the function parameter, I will
put const in function parameter or create temporary variable.
int gFunc( const int x, const int y ) {
// Do something
// ?.
return z;
}
// or?
int gFunc( int x, int y ) {
int temp_x = x;
int temp_y = y;
// Do something
// ?.
return z;
}
If I want to put character buffer (like string) or class name in the
function parameter, I will need to put reference in it to avoid
overhead of copying each data size. Also, I will remember to put
const before reference if necessary.
class Object {
int x;
int y;
int z;
}
Object gFunc( const Object& obj ) {
Object temp_obj;
// Do something
// ?.
return temp_obj;
}
The return type requires to create temporary object before all data
members in class Object is copied and temp_obj is destroyed from the
stack.
Tell me why you have reason to add reference to the return type.
Anytime you need to pass something by reference. That's that simple.
class Data {
int x;
int y;
int z;
};
class Object {
Data m_Data;
Data&DoSomething() {
// Do something
return m_Data;
}
};
Notice DoSomething has reference return type. Do you need to use
reference return type? If yes, what is it used for?
It depends on the cases, sometimes you need it, sometimes you don't.
It's impossible to create objective absolute rules about all of this stuff.
In C++ there is a quite peculiar case, though: iostreams are (always?)
passed and returned by non-const reference. Somebody else will
articulate this point, eventually.
Maybe, you want to suggest your code to explain why you need
reference return type. Reference return type is dangerous unless you
use return ?this? pointer.
The "dangerousness" of returning a reference is absolutely not related
to the fact of returning a reference to "*this".
The most dangerous case is when you return a reference (or a pointer) to
a local non static variable, which very likely amounts to looking for
trouble.
Further than that, all this discourse is too vague to be of any use.
Pick a practical non-abstract example and implement it as you find it
more correct, then we could discuss the various approaches.
--
FSC - http://userscripts.org/scripts/show/59948
http://fscode.altervista.org - http://sardinias.com