PDA

Visualizza la versione completa : [C++] Domanda sulle classi


P4nico
09-01-2008, 22:28
In una classe del linguaggio C++ non può essere definito un campo che sia una istanza della classe, ma un puntatore a un oggetto della classe stessa si! Per quale motivo?

shodan
09-01-2008, 23:56
Nemmeno in una struct del C se è per quello. Nella seconda edizione di "Linguaggio C" gli autori liquidano la cosa in tre parole. Non è permesso.
Il C++ riprende semplicemente il concetto.

P4nico
10-01-2008, 06:44
non hai risposto alla domanda

MItaly
10-01-2008, 15:49
Guarda che questa limitazione non esiste, come ti dimostra questo esempio. :fagiano:


#include <iostream>
class test
{
public:
int dummy;
test()
{
dummy=10;
std::cout<<"Nel costruttore senza parametri di 'test'"<<std::endl;
};
test(int Dummy)
{
dummy=Dummy;
std::cout<<"Nel costruttore parametrizzato di 'test'; dummy="<<dummy<<std::endl;
};
};
class test2
{
public:
test testInstance;
test2()
{
std::cout<<"Nel costruttore senza parametri di 'test2'"<<std::endl;
};
test2(int DummyValue) : testInstance(DummyValue)
{
std::cout<<"Nel costruttore parametrizzato di 'test2'; DummyValue="<<DummyValue<<std::endl;
};

};
int main()
{
test2 t2_1;
test2 t2_2(50);
std::cin.sync();
std::cin.ignore();
return 0;
}

MacApp
10-01-2008, 16:05
Originariamente inviato da MItaly
Guarda che questa limitazione non esiste

non hai capito la domanda, in cui P4nico si chiede perché non sia possibile fare robe del genere:


class CTest{
CTest fTest; // Non può essere compilato;
CTest * fTestPtr; // ok
};

;-)

MItaly
10-01-2008, 16:19
Ops... :stordita: Be', perché altrimenti quella classe occuperebbe spazio infinito, visto che ogni istanza della classe ne conterrebbe un'altra che ne conterrebbe un'altra ancora e così via. Invece con un puntatore questo problema non si pone: può essere impostato a NULL, può puntare a this, può creare dei "puntamenti" circolari (il puntatore dell'istanza A punta all'istanza B, il cui puntatore punta a C, il cui puntatore punta a D, il cui puntatore punta ad A), ..., e in ogni caso il problema è delegato al programmatore, che si arrangia come meglio crede.

P4nico
10-01-2008, 19:49
Originariamente inviato da MItaly
Ops... :stordita: Be', perché altrimenti quella classe occuperebbe spazio infinito, visto che ogni istanza della classe ne conterrebbe un'altra che ne conterrebbe un'altra ancora e così via. Invece con un puntatore questo problema non si pone: può essere impostato a NULL, può puntare a this, può creare dei "puntamenti" circolari (il puntatore dell'istanza A punta all'istanza B, il cui puntatore punta a C, il cui puntatore punta a D, il cui puntatore punta ad A), ..., e in ogni caso il problema è delegato al programmatore, che si arrangia come meglio crede.

Ora che hai capito cosa indendevo mi hai dato davvero 1 ottima risposta, ti ringrazio.

MItaly
10-01-2008, 22:40
Prego, ciao! :ciauz:

Loading