Pergunta

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

qual será o valor do pa, pb depois de executar a função

EDIT como passar como ponteiro é o retorno se pa, pb é NULL

Foi útil?

Solução

Como salientado em outras respostas - ambos ainda será NULL após a chamada. No entanto, há duas soluções possíveis para este problema:

1) referências

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) ponteiros

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.

A maioria dos programadores provavelmente escolheria referências porque então eles não precisam de afirmar qualquer coisa (referências nunca pode ser NULL).

Outras dicas

Eles serão NULL, desde que você está passando-os por valor. Se você quiser passá-lo por referência, você faria isso:

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

Note, eu não estou certo de que você está tentando realizar com as variáveis ??globais. Elas nunca foram usadas neste exemplo, uma vez que as variáveis ??locais (parâmetros de função) ocultá-los.

Eu acho que você também precisa declarar um tipo de valor de retorno para a função para que ele seja válido C ++.

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

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

Como alternativa:

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

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

NULL, porque você está passando os ponteiros em termos de valor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top