Pregunta

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

cuál será el valor de pa, pb después de ejecutar la función

EDITAR cómo pasar como puntero es el retorno si pa, pb es NULL

¿Fue útil?

Solución

Como se señaló en otras respuestas, ambas seguirán siendo NULL después de la llamada. Sin embargo, hay dos posibles soluciones a este problema:

1) referencias

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

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 mayoría de los programadores probablemente elegirían referencias porque no necesitan afirmar nada (las referencias nunca pueden ser NULL).

Otros consejos

Serán NULL, ya que los pasa por valor. Si desea pasarlo por referencia, debe hacer esto:

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

Tenga en cuenta que no estoy seguro de lo que está intentando lograr con las variables globales. Nunca se utilizan en este ejemplo, ya que las variables locales (parámetros de función) las ocultan.

Creo que también necesita declarar un tipo de valor de retorno para su función para que sea válida C ++.

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

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

Alternativamente:

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

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

NULL, porque estás pasando los punteros por valor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top