Como usar herança em Visual C++

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 815670
Para obter uma Microsoft Visual translation from VPE for Csharp .NET versão deste artigo, consulte 307205.
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 307222.
Sumário
A herança é um conceito importante orientada a objeto. Você pode usar a herança para criar uma hierarquia de classes relacionadas e reutilizar a funcionalidade que é definida em classes existentes. Este artigo passo a passo descreve como usar a herança no Microsoft Visual C++ .NET ou no Microsoft Visual C++ 2005.

Os exemplos a seguir, você define uma classe base que contém campos e métodos para uma conta bancária genérico. Em seguida, você definir uma classe derivada que representa um determinado tipo de conta bancária. A classe derivada herda os membros da classe base, substitui membros selecionados e, em seguida, adiciona novos membros para a nova conta.

back to the top

Requisitos

Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:
  • Sintaxe do C++
  • Managed Extensions para C++ e conceitos orientados a objeto
back to the top

Criar um novo aplicativo de console do C++ gerenciado

  1. Inicie o Visual Studio. NET ou o Visual Studio 2005 e em seguida, crie um novo projeto Managed C++ Application chamado UseInheritance .

    No Visual C++ .NET 2003, execute estas etapas:
    1. Em Project Types , clique em Projetos do Visual c++ .
    2. Em modelos , clique em Aplicativo de console (NET) .
    No Visual C++ 2005, siga estas etapas:
    1. Em Project Types , clique em Visual C++ .
    2. Em modelos , clique em Aplicativo de console CLR .
  2. Salve o projeto.
back to the top

Criar uma classe base abstrata e uma classe derivada

  1. No Solution Explorer, alterne para a exibição de classe. Para fazer isso, clique em Class View no menu Exibir .
  2. Clique o projeto UseInheritance com o botão direito do mouse, aponte para Add e, em seguida, clique em Add Class .

    Observação No Visual C++ 2005, clique em Class , Add Class .
  3. Na caixa de diálogo Add Class , selecione a Classe do C++ genérico em modelos e em seguida, clique em Abrir .

    Observação No Visual C++ 2005, clique em Classe do C++ em modelos .
  4. No Assistente de classe C++ genérico, digite a conta na caixa nome da classe e em seguida, clique em Concluir . A classe Account aparece como abaixo:
    #pragma onceclass Account{public:	Account(void);	~Account(void);};
    para que a classe Account um resumo gerenciado C++ classe, adicione a palavra-chave __gc __abstract antes da classe Account :
    __abstract __gc class Account{public:	Account(void);	~Account(void);};
    Observação você deve adicionar o common language runtime oferecem suporte a compilador opção ( / CLR: oldSyntax ) no Visual C++ 2005 a compilar com êxito este exemplo de código. Para fazer isso, execute as seguintes etapas:
    1. Clique em projeto e, em seguida, clique em propriedades ProjectName .

      Observação ProjectName representa o nome do projeto.
    2. Expanda Configuration Properties e, em seguida, clique em Geral .
    3. Clique para selecionar Common Language Runtime suporte, sintaxe antiga (/ CLR: oldSyntax) no projeto oferece suporte a Common Language Runtime definindo no painel à direita, clique em Aplicar e em seguida, clique em OK .
    Para obter mais informações sobre o common language runtime oferece suporte às opções de compilador, visite o seguinte site:
    /CLR (common Language Runtime Compilation)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
  5. Repita as etapas 1 a 3 para adicionar a classe C++ genérica SavingsAccount .
  6. No Assistente de classe C++ genérico, digite SavingsAccount na caixa nome da classe e em seguida, clique em Concluir . Para fazer SavingsAccount uma classe C++ gerenciada, adicione a palavra-chave __gc antes da aula SavingAccount :
    __gc class SavingsAccount :	public Account{public:	SavingsAccount(void);	~SavingsAccount(void);};
back to the top

Escrever código para a classe base

  1. Abra o arquivo Account.h
  2. Use a mscorlib.dll da seguinte maneira:
    #using <mscorlib.dll> // You must use this code to take advantage of the .NET Framework.
  3. Use a diretiva usando o namespace System de modo que não é necessário que qualificar declarações desses namespaces posteriormente no seu código. Adicione o seguinte código o Account.h arquivo:
    using namespace System; // This shortcut avoids you having to type System::Console
  4. No modo de exibição código, adicione dois campos à classe Account para representar o saldo da conta e o nome do proprietário de conta do:
    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. Substituir o construtor de conta para inicializar esses campos:
    public :	Account(String *szName, double bal)	{		this->name = szName;		this->balance = bal;	}
  6. Adicione a seguinte função à classe sob a seção pública. Porque esse método não está marcado com a palavra-chave virtual , ele não pode ser substituído em classes derivadas. A função ChangeName altera o nome do proprietário de conta do:
    void ChangeName(String *szNewName)	{		this->name = szNewName;	}
  7. Adicione as funções a seguir à classe. A palavra-chave virtual significa que os métodos podem ser substituídos nas classes 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. Adicione a seguinte função virtual pura à classe sob a seção pública. Isso significa que a função deve ser substituída em classes derivadas:
    	virtual double CalculateBankCharge() = 0;
Observação Cada função de membro de uma classe abstrata __gc deve ser definida a menos que a função de membro é uma função essencialmente virtual.

back to the top

Escrever código para a classe derivada

  1. Abra o arquivo SavingsAccount.h.
  2. Adicionar um campo para a classe SavingsAccount :
    private:	double minBalance;  // If the balance drops below minBalance, 						// the bank charges a fee on the account.
  3. Para inicializar os campos na classe base e nesta classe, substitua o construtor SavingsAccount sob a seção 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. Adicione as funções a seguir à classe SavingsAccount sob a seção pública. Essas funções substituem as funções que são herdadas da classe 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. Você deve substituir todas as funções virtuais puras da classe base abstrata. Adicione o seguinte método à classe SavingsAccount :
    double CalculateBankCharge(){if (balance < minBalance)	return 5.00;else	return 0.00;}
back to the top

Verificar se ele funciona

  1. Abra o código para o arquivo UseInheritance.cpp no código de janela View. Adicione o seguinte código para UseInheritance.cpp:
    #include "SavingsAccount.h"
  2. Na função principal, crie um objeto SavingsAccount e, em seguida, copie o seguinte código:
    SavingsAccount *sa = new SavingsAccount(S"Denise Smith", 100.00, 25);sa->Display();
  3. Adicione o seguinte código para chamar métodos públicos SavingsAccount ou de conta :
    sa->Credit(100);sa->Debit(180);sa->ChangeName(S"Samantha Smith");sa->Display();Console::WriteLine(S"Bank Charge: {0}",(sa->CalculateBankCharge()).ToString());
  4. Crie o aplicativo.
  5. Definir um ponto de interrupção no início da função principal e, em seguida, iniciar o aplicativo no modo de depurador. Entrar em cada instrução e, em seguida, exiba os métodos que são chamados enquanto você está depurando o aplicativo. O aplicativo exibe as seguintes informações no console:
    Name=Denise Smith, balance=100$5 charge if balance goes below $25Name=Samantha Smith, balance=20$5 charge if balance goes below $25Bank charge: $5
back to the top
Referências
Para obter mais informações sobre extensões gerenciadas para C++, visite a seguinte site da Microsoft Developer Network (MSDN):Para obter mais informações sobre as regras para tipos de __gc, visite o seguinte site da MSDN:back to the top

Propriedades

ID do Artigo: 815670 - Última Revisão: 11/14/2007 06:26:28 - Revisão: 2.2

Microsoft Visual C++ .NET 2003 Standard Edition, Microsoft Visual C++ .NET 2002 Standard Edition, Microsoft Visual C++ 2005 Express Edition

  • kbmt kbhowtomaster kbmanaged kblangcpp kbhowto kbinheritance KB815670 KbMtpt
Comentários