Reglas para declarar Constructores
un constructor tiene el mismo nombre que su clase.Cualquier número de constructores puede declarar, sujeto a las reglas de funciones sobrecargadas.(Para obtener más información, vea La sobrecarga.)
class-name ( argument-declaration-list )
Comentarios
argument-declaration-list puede estar vacío.
C++ define dos tipos especiales de constructores, default y constructores de copias, descritos en la siguiente tabla.
Predeterminado y copia Constructores
clase de Construction |
Argumentos |
Propósito |
---|---|---|
Constructor predeterminado. |
Puede llamar sin argumentos |
Construye un objeto predeterminado del tipo de clase |
Constructor de copia |
Puede aceptar un solo argumento de referencia al mismo tipo de clase |
Objetos de la copia del tipo de clase |
Los constructores predeterminados pueden llamar sin argumentos.Sin embargo, puede declarar un constructor predeterminado con una lista de argumentos, siempre que todos los argumentos tengan valores predeterminados.De igual forma, los constructores de copias deben aceptar un único argumento de referencia al mismo tipo de clase.Varios argumentos se pueden proporcionar, proporcionado todos los argumentos subsiguientes tienen valores predeterminados.
Si no se proporciona ningún constructor, el compilador intenta generar un constructor predeterminado.Si no se proporciona un constructor de copias, el compilador intenta generar uno.Vea a estos constructores usa las funciones públicas de miembro.Se genera un error si se especifica un constructor de copias con un primer argumento que sea un objeto y no una referencia.
Un constructor predeterminado generado por el compilador coloque el objeto (se inicializan los vftables y los vbtables, tal como se ha descrito anteriormente), y llama a los constructores predeterminados de las clases base y miembros, pero no realiza ninguna otra acción.Se llama a los constructores de clase base y miembro solo si existen, son accesibles, y son inequívocos.
Un constructor generados de copia coloca un nuevo objeto y realiza una copia miembro a miembro del contenido del objeto que se va a copiar.Si existen los constructores de clase base o miembro, se denominan; si no, se realiza la copia bit a bit.
Si todas las clases de base y miembro de unatype clase tienen constructores de copias que aceptan un argumento const, el constructor generados de copia acepta un único argumento consttype con y.Si no, el constructor generados de copia acepta un único argumento de tipotype y.
Puede utilizar un constructor para inicializar un objeto de const o de volatile , pero el constructor en sí no se puede declarar como const o volatile.La única clase de almacenamiento válida para un constructor es Alineado; el uso de cualquier otro modificador de clase de almacenamiento, incluyendo la palabra clave de __declspec , con un constructor produce un error del compilador.
La convención de llamada de stdcall se utiliza en funciones miembro static y funciones globales declaradas con la palabra clave de __stdcall , y que no usa una lista de argumentos de variable.Cuando se utiliza la palabra clave de __stdcall en una función miembro no estática, como un constructor, el compilador utilizará la convención de llamada thiscall.”
los constructores de clases base no son heredados por las clases derivadas.Cuando un objeto de tipo de clase derivada se crea, es el iniciar construido con componentes de la clase base; a continuación se desplaza los componentes de la clase derivada.El compilador utiliza el cada constructor de clase base como inicializa esa parte del objeto completo (excepto en casos de derivación virtual, como se describe en clases base que se inicializan).