Bene, non sto dicendo che questo è esattamente il motivo per cui gli oggetti sono tipi di riferimento o passati per riferimento, ma posso darti un esempio del perché questa è una buona idea a lungo termine.
Se non sbaglio, quando erediti una classe in C ++, tutti i metodi e le proprietà di quella classe vengono copiati fisicamente nella classe figlio. Sarebbe come scrivere di nuovo il contenuto di quella classe all'interno della classe figlia.
Quindi questo significa che la dimensione totale dei dati nella classe figlia è una combinazione delle cose nella classe genitore e nella classe derivata.
EG:
#include
class Top
{
int arrTop[20] = {1,2,3,4,5,6,7,8,9,9,8,7,6,5,4,3,2,1};
};
class Middle : Top
{
int arrMiddle[20] = {1,2,3,4,5,6,7,8,9,9,8,7,6,5,4,3,2,1};
};
class Bottom : Middle
{
int arrBottom[20] = {1,2,3,4,5,6,7,8,9,9,8,7,6,5,4,3,2,1};
};
int main()
{
using namespace std;
int arr[20];
cout << "Size of array of 20 ints: " << sizeof(arr) << endl;
Top top;
Middle middle;
Bottom bottom;
cout << "Size of Top Class: " << sizeof(top) << endl;
cout << "Size of middle Class: " << sizeof(middle) << endl;
cout << "Size of bottom Class: " << sizeof(bottom) << endl;
}
Che ti mostrerebbe:
Size of array of 20 ints: 80
Size of Top Class: 80
Size of middle Class: 160
Size of bottom Class: 240
Ciò significa che se hai una grande gerarchia di più classi, la dimensione totale dell'oggetto, come dichiarato qui, sarebbe la combinazione di tutte quelle classi. Ovviamente, questi oggetti sarebbero considerevolmente grandi in molti casi.
La soluzione, credo, è crearla sull'heap e usare i puntatori. Ciò significa che la dimensione degli oggetti delle classi con più genitori sarebbe gestibile, in un certo senso.
Ecco perché usare i riferimenti sarebbe un metodo più preferibile per farlo.