2010-08-24 8 views
5

Soy un novato en C++. No me importa esta estúpida pregunta:¿Siempre se llama al constructor predeterminado de C++, como se indica en C++ Primer?

En C++ imprimación cuarta edición (Stanley Lipmann) en la página 52, hay una frase que dice:

El valor predeterminado constructor se utiliza independientemente del lugar donde se define una variable .

¿Alguien puede explicar un poco más? Estas declaraciones parecen que le falta algo.

+0

Creo que necesitas poner un poco más de contexto a la oración, ya que no siempre es cierto que ** se usa el constructor predeterminado ** siempre ... –

+4

Dicen que no hay preguntas estúpidas, pero claramente están equivocadas. Este sitio está destinado, por lo que las preguntas y respuestas ayudan no solo al que realmente hace una pregunta en particular aquí, sino también a cualquiera que esté buscando una respuesta a la misma pregunta o a una similar. Ahora piénsalo. ¿Qué tan útil es el tema "C++ newbie: pregunta estúpida". Haz algo por la comunidad. Piense en lo que pregunta y pregunte correctamente, y la comunidad podría ayudarlo. –

+0

¿qué capítulo/sección? Parece que no puedo encontrar esa frase – Chubsdad

Respuesta

2

Probablemente se refiere a Stanley Lippman?

De todos modos, aunque no tengo a mano una copia para comprobar, supongo que significa que si tiene algo como:

myclass X; 

... X el objeto se inicializa con el valor predeterminado ctor , independientemente de si el objeto es global (fuera de cualquier función), local para una función o local para algún otro ámbito dentro de una función (por ejemplo, en un bucle for).

+0

Sonar así sería lo esencial. Agregaría que las matrices y las matrices variables/matrices también se construyen por defecto si no se solicita ningún otro constructor. –

3

Si usted tiene una clase Object:

class Object 
{ 
public: 
    int x; 

    Object() { x = 5; } 
}; 

y crear instancias de una en una función como esta:

void foo() 
{ 
    Object obj; 
    // obj.x == 5 
} 

El constructor por defecto se utilizará. Los objetos también se construyen con el constructor por defecto cuando se declara dentro de otra clase y una instancia que otra clase:

class AnotherObject 
{ 
public: 
    Object obj; 
}; 

void bar() 
{ 
    AnotherObject another; 
    // another.obj.x == 5 
} 
0

$ 12,1

El constructor por defecto (12.1), constructor de copia y copiar operador de asignación (12.8), y destructor (12.4) son funciones especiales de miembros. La implementación declarará implícitamente estas funciones miembro para un tipo de clase cuando el programa no las declara explícitamente, excepto como se indica en 12.1. La implementación implícitamente los define si se usan, como se especifica en 12.1, 12.4 y 12.8. Los programas no definirán las funciones de miembros especiales declaradas implícitamente. Los programas pueden referirse explícitamente a funciones de miembros especiales declaradas implícitamente. [Ejemplo: un programa puede llamar explícitamente, tomar la dirección o formar un puntero al miembro a una función de miembro especial declarada implícitamente.

4

Del libro en sí:

Cada clase también puede definir lo que ocurre si se define una variable del tipo pero no se proporciona un inicializador. Una clase lo hace definiendo un constructor especial, conocido como constructor predeterminado. Este constructor se llama el constructor predeterminado porque se ejecuta "de manera predeterminada"; si no hay un inicializador, entonces se usa este constructor. El constructor predeterminado se usa independientemente de dónde se defina una variable.

(mi cursiva).

Así que estás en una sección del libro donde ya están hablando de constructores por defecto (como debería ser evidente en algunas de las otras respuestas, el constructor predeterminado es definitivamente no siempre usado).

Todo lo que el libro dice es, en aquellas situaciones en las que el constructor por defecto es utilizado, no hace ninguna diferencia en absoluto donde se define la variable (dentro o funciones fuera, dentro o fuera de las clases, dentro de llaves como bucles, declaraciones de selección o incluso llaves desnudas, etc.).

Cuestiones relacionadas