Domanda

ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(ClassA* pa,ClassB* pb)
{
pa = new ClassA;
pb = new ClassB;
}

quale sarà il valore di pa, pb dopo aver eseguito la funzione

EDIT come passare come puntatore è il ritorno se pa, pb è NULL

È stato utile?

Soluzione

Come indicato in altre risposte, entrambi saranno comunque NULL dopo la chiamata. Tuttavia, esistono due possibili soluzioni a questo problema:

1) referenze

void assignObject(ClassA*& pa, ClassB*& pb)
{
    pa = new ClassA;
    pb = new ClassB;
}

ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(pa, pb); // both will be assigned as expected.

2) puntatori

void assignObject(ClassA** pa, ClassB** pb)
{
    assert(pa != NULL); assert(pb != NULL);
    *pa = new ClassA;
    *pb = new ClassB;
}
ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(&pa, &pb); // both will be assigned as expected.

La maggior parte dei programmatori probabilmente sceglierebbe riferimenti perché in tal caso non devono far valere nulla (i riferimenti non possono mai essere NULL).

Altri suggerimenti

Saranno NULL, poiché li stai passando per valore. Se vuoi passarlo per riferimento, dovresti farlo:

ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(ClassA*& pa, ClassB*& pb)
{
    pa = new ClassA;
    pb = new ClassB;
}

Nota, non sono sicuro di ciò che stai cercando di ottenere con le variabili globali. Non vengono mai utilizzati in questo esempio, poiché le variabili locali (parametri di funzione) le nascondono.

Penso che sia necessario dichiarare anche un tipo di valore restituito per la propria funzione affinché sia ??C ++ valido.

ClassA* pa = NULL;
ClassA* pb = NULL;

void assignObject(ClassA* &pa,ClassB* &pb)
{
    pa = new ClassA;
    pb = new ClassB;
}

In alternativa:

ClassA* pa = NULL;
ClassA* pb = NULL;

void assignObject(ClassA** pa,ClassB** pb)
{
    *pa = new ClassA;
    *pb = new ClassB;
}

NULL, perché stai passando i puntatori in base al valore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top