Cómo utilizar la herencia en Visual C++

Seleccione idioma Seleccione idioma
Id. de artículo: 815670 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo
Para obtener una versión de Microsoft Visual C# .NET de este artículo, consulte 307205.
Para obtener una versión de Microsoft Visual Basic .NET de este artículo, consulte 307222.

Resumen

La herencia es un concepto importante dentro de la programación orientada a objetos,. Puede utilizar la herencia para generar una jerarquía de clases relacionadas y reutilizar la funcionalidad que se define en las clases existentes. En este artículo paso a paso se describe cómo utilizar la herencia en Microsoft Visual C++ .NET o en Microsoft Visual C++ 2005.

En los ejemplos siguientes, defina una clase base que contiene los campos y métodos para una cuenta bancaria genérica. A continuación, defina una clase derivada que representa un tipo de cuenta bancaria en particular. La clase derivada hereda a los miembros de la clase base, reemplaza a los miembros seleccionados y, a continuación, agrega a nuevos miembros para la nueva cuenta.

Requisitos

En este artículo se supone que está familiarizado con los temas siguientes:
  • Sintaxis de C++
  • Extensiones administradas para C++ y conceptos orientados a objetos

Crear una nueva aplicación de consola de C++ administrado

  1. Inicie Visual Studio. NET o Visual Studio 2005 y a continuación, cree un nuevo proyecto de aplicación C++ administrada que se denomina UseInheritance .

    En Visual C++ .NET 2003, siga estos pasos:
    1. En Tipos de proyecto , haga clic en Proyectos de Visual C++ .
    2. En plantillas , haga clic en Aplicación de consola (. NET) .
    En Visual C++ 2005, siga estos pasos:
    1. En Tipos de proyecto , haga clic en Visual C++ .
    2. En plantillas , haga clic en Aplicación de consola CLR .
  2. Guarde el proyecto.

Crear una clase base abstracta y una clase derivada

  1. En el Explorador de soluciones, cambie a la vista de clases. Para ello, haga clic en Vista de clases en el menú Ver .
  2. Haga clic con el botón secundario en el proyecto UseInheritance , elija Agregar y, a continuación, haga clic en Agregar clase .

    Nota En Visual C++ 2005, haga clic en clase , no Agregar clase .
  3. En el cuadro de diálogo Agregar clase , seleccione Clase genérica de C++ en plantillas y, a continuación, haga clic en Abrir .

    Nota En Visual C++ 2005, haga clic en La clase de C++ en plantillas .
  4. En el Asistente de clase genérica de C++, escriba la cuenta en el cuadro nombre de clase y a continuación, haga clic en Finalizar . La clase de cuenta aparece como debajo:
    #pragma once
    
    class Account
    {
    public:
    	Account(void);
    	~Account(void);
    };
    
    para hacer que la clase Account un resumen administrados de clase de C++, agregue la palabra clave __abstract __gc antes de la clase de cuenta :
    __abstract __gc class Account
    {
    public:
    	Account(void);
    	~Account(void);
    };
    
    Nota debe agregar common language runtime admite opción de compilador ( / clr: oldSyntax ) en Visual C++ 2005 para compilar correctamente en este ejemplo de código. Para ello, siga estos pasos:
    1. Haga clic en proyecto y, a continuación, haga clic en propiedades ProjectName .

      Nota ProjectName representa el nombre del proyecto.
    2. Expanda Propiedades de configuración y, a continuación, haga clic en General .
    3. Haga clic para seleccionar compatible con Common Language Runtime, sintaxis antigua (/ CLR: oldSyntax) en la configuración de proyecto compatibilidad con Common Language Runtime en el panel derecho, haga clic en Aplicar y, a continuación, haga clic en Aceptar .
    Para obtener más información acerca de common language runtime admiten opciones de compilador, visite el siguiente sitio Web de Microsoft:
    /CLR (compilación de common Language Runtime)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
  5. Repita los pasos 1-3 para agregar la clase de C++ SavingsAccount genérica.
  6. En el Asistente de clase genérica de C++, escriba SavingsAccount en el cuadro nombre de clase y a continuación, haga clic en Finalizar . Para hacer que SavingsAccount una clase C++ administrada, agregue la palabra clave __gc antes de la clase SavingAccount :
    __gc class SavingsAccount :
    	public Account
    {
    
    public: SavingsAccount(void); ~SavingsAccount(void);
    };

Escribir el código para la clase de base

  1. Abra el archivo Account.h
  2. Utilice el archivo mscorlib.dll la manera siguiente:
    #using <mscorlib.dll> // You must use this code to take advantage of the .NET Framework.
  3. Utilice la directiva using en el espacio de nombres System para que no tengan que calificar las declaraciones de estos espacios de nombres más adelante en el código. Agregue el código siguiente en el Account.h archivo:
    using namespace System; // This shortcut avoids you having to type System::Console
  4. En la vista código, agregue dos campos a la clase de cuenta para representar el saldo de cuenta y el nombre del titular de la cuenta: private
    private:
    	String *name; // This is only accessible in base class.
    protected:
    
    double balance; // This is accessible in the base class and the derived class.
  5. Reemplace el constructor de cuenta para inicializar estos campos:
    public :
    	Account(String *szName, double bal)
    	{
    		this->name = szName;
    		this->balance = bal;
    	}
  6. Agregue la siguiente función a la clase en la sección pública. Puesto que este método no está marcado con la palabra clave virtual , no se puede anular en las clases derivadas. La función ChangeName cambia el nombre del titular de la cuenta:
    void ChangeName(String *szNewName)
    	{
    		this->name = szNewName;
    	}
    
  7. Agregue las siguientes funciones a la clase. La palabra clave virtual es decir, los métodos pueden reemplazarse en las clases derivadas:
    virtual void Credit(double amount)
    	{
    		this->balance += amount;
    	}
    	virtual void Debit(double amount)
    	{
    		this->balance -= amount;
    	}
    
    	virtual void Display()
    	{
    		Console::WriteLine(S"Name={0}, balance={1}",name,balance.ToString());
    	}
  8. Agregue la siguiente función virtual pura a la clase en la sección pública. Esto significa que la función debe anularse en las clases derivadas:
    	virtual double CalculateBankCharge() = 0;
Nota Debe definir cada función de miembro de una clase __gc abstracta a menos que la función miembro sea una función virtual pura.

Escribir el código para la clase derivada

  1. Abra el archivo SavingsAccount.h.
  2. Agregar un campo a la clase SavingsAccount :
    private:
    	double minBalance;  // If the balance drops below minBalance, 
    						// the bank charges a fee on the account.
  3. Para inicializar los campos de la clase base y de esta clase, reemplace el constructor SavingsAccount en la sección pública:
    SavingsAccount(String *nm, double bal, double min)
    			: Account(nm, bal) // Call the base class constructor first.
    {
    	minBalance = min; // Then, initialize the fields in this class.
    }
  4. Agregue las siguientes funciones a la clase SavingsAccount en la sección pública. Estas funciones reemplazar las funciones que se heredan de la clase base:
    void Debit(double amount)
    {
    
    if (amount <= balance) { // Use balance. Balance is inherited from base class. // Call Debit. Debit is inherited from base class. SavingsAccount::Account::Debit(amount); }
    } void Display() {
    SavingsAccount::Account::Display(); // Call Display. Display is inherited from base class. Console::WriteLine(S"$5 charge if the balance goes below ${0}", minBalance.ToString());
    }
  5. Debe reemplazar todas las funciones virtuales puras de la clase base abstracta. Agregue el método siguiente a la clase SavingsAccount :
    double CalculateBankCharge()
    {
    
    if (balance < minBalance) return 5.00; else return 0.00;
    }

Comprobar que funciona

  1. Abra el código para el archivo UseInheritance.cpp en el código de la ventana de vista. Agregue el código siguiente a UseInheritance.cpp:
    #include "SavingsAccount.h"
  2. En la función principal, cree un objeto SavingsAccount y, a continuación, copie el código siguiente:
    SavingsAccount *sa = new SavingsAccount(S"Denise Smith", 100.00, 25);
    sa->Display();
  3. Agregue el código siguiente para llamar a métodos públicos en SavingsAccount o en cuenta :
    sa->Credit(100);
    sa->Debit(180);
    sa->ChangeName(S"Samantha Smith");
    sa->Display();
    Console::WriteLine(S"Bank Charge: {0}",(sa->CalculateBankCharge()).ToString());
  4. Genere la aplicación.
  5. Establezca un punto de interrupción al principio de la función Main y, a continuación, inicie la aplicación en el modo del depurador. Deténgase en cada instrucción y, a continuación, ver los métodos que se llaman mientras depura la aplicación. La aplicación muestra la siguiente información en la consola:
    Name=Denise Smith, balance=100
    $5 charge if balance goes below $25
    Name=Samantha Smith, balance=20
    $5 charge if balance goes below $25
    Bank charge: $5

Referencias

Para obtener más información acerca de las extensiones administradas para C++, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/4xs93xhk(vs.71).aspx
Para obtener más información sobre las reglas de tipos __gc, visite el siguiente sitio Web de MSDN:
http://msdn2.microsoft.com/en-us/library/Aa712825(VS.71).aspx

Propiedades

Id. de artículo: 815670 - Última revisión: miércoles, 14 de noviembre de 2007 - Versión: 2.2
La información de este artículo se refiere a:
  • Microsoft Visual C++ .NET 2003 Standard
  • Microsoft Visual C++ .NET 2002 Standard
  • Microsoft Visual C++ 2005 Express Edition
Palabras clave: 
kbmt kbhowtomaster kbmanaged kblangcpp kbhowto kbinheritance KB815670 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 815670

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com