Il metodo "Inside the class" (I) fa lo stesso del metodo "outside the class" (O).
Tuttavia, (I) può essere utilizzato quando una classe viene utilizzata solo in un file (all'interno di un file .cpp). (O) viene utilizzato quando si trova in un file di intestazione. i file cpp sono sempre compilati. I file di intestazione sono compilati quando si utilizza #include "header.h".
Se si utilizza (I) in un file di intestazione, la funzione (Fun1) verrà dichiarata ogni volta che si include #include "header.h". Questo può portare a dichiarare la stessa funzione più volte. È più difficile da compilare e può persino portare a errori.
Esempio per un corretto utilizzo:
File1: "Clazz.h"
//This file sets up the class with a prototype body.
class Clazz
{
public:
void Fun1();//This is a Fun1 Prototype.
};
File2: "Clazz.cpp"
#include "Clazz.h"
//this file gives Fun1() (prototyped in the header) a body once.
void Clazz::Fun1()
{
//Do stuff...
}
File3: "UseClazz.cpp"
#include "Clazz.h"
//This file uses Fun1() but does not care where Fun1 was given a body.
class MyClazz;
MyClazz.Fun1();//This does Fun1, as prototyped in the header.
File4: "AlsoUseClazz.cpp"
#include "Clazz.h"
//This file uses Fun1() but does not care where Fun1 was given a body.
class MyClazz2;
MyClazz2.Fun1();//This does Fun1, as prototyped in the header.
file5: "DoNotUseClazzHeader.cpp"
//here we do not include Clazz.h. So this is another scope.
class Clazz
{
public:
void Fun1()
{
//Do something else...
}
};
class MyClazz; //this is a totally different thing.
MyClazz.Fun1(); //this does something else.
Forse un libro per principianti su C++ potrebbe essere in ordine? –
@Downvoters perché? cosa c'è di sbagliato nella mia domanda? – JohnJohnGa
Ci sono in realtà 3 opzioni qui. Il secondo esempio potrebbe avere la definizione della funzione nel file di intestazione (ma non ancora inline) o in un file '.cpp' separato. –