Escolar Documentos
Profissional Documentos
Cultura Documentos
Os elementos entre os simbolos [] são opcionais. Contudo o tag deve ser especificado se os
declaradores não o forem (primeira forma).
A palavra reservada class declara um tipo de classe (primeira forma) ou define um objeto de um tipo de
classe (segunda forma).
Os elementos de uma definição de classe são (sintaxe):
tag
Nome do tipo da classe. O tag passa a ser considerado uma palavra reservada no escopo de classes.
lista_de_bases
Especifica a classe (ou classes) a partir da qual (quais) esta é derivada (herança). Ou seja, especifica as suas
classes base. Cada nome de classe base pode ser precedido por um especificador de acesso (public, private,
protected) e da palavra reservada virtual. Consulte a Tabela de Privilégios de Acesso a Membros para
obter mais informações.
lista_de_ membros
Declara membros ou “friends” da classe. Membros podem ser dados, funções, outras classes aninhadas,
enums, campos de bits e nomes de tipos. “Friends” podem incluir funções ou classes. Não é permitia a
inicialização explícita de dados. Um tipo classe não pode conter a sí mesmo como um membro não estático.
Contudo, ele pode conter um ponteiro ou uma referência para sí mesmo. Consulte a palavra reservada
virtual e a Tabela de Privilégios de Acesso a Membros para mais informações.
declaradores
Exemplo
No exemplo a seguir, a classe CAboutDlg é derivada a partir da classe base CDialog. A nova classes
contem uma função membro, denominada CAboutDlg:
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
protected:
virtual void DoDataExchange(CDataExchange* pDX);
};
Texto extraido dos manuais de C++ da Microsoft Corp e adaptado por Angelo Passaro. 1º semestre
Página 1/1
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
public
public: [lista_de_membros]
Quando este especifidador de acesso public precede uma lista de membros da classe, significa que esses
membros podem ser acessados por qualquer função. Isto se aplica a todos os membros declarados após o
especificador até o próximo especificador de acesso, ou até o final da classe.
Quando a palavra reservada public precede o nome de uma classe base, significa que todos os membros
public ou protected da classe base são também public ou protected da classe derivada, respectivamente.
A forma de acesso padrão de membros de uma classe é private, enquanto que, o acesso padrão aos
membros de um structure ou union é public.
A forma de acesso padrão de uma classe base é private para classes e public para structures. Unions não
podem ter classes base.
Para mais informações, consulte private, protected, friend, e Tabela de Privilégios de Acesso a Membros.
Exemplo
class BaseClass
{
public:
int pubFunc();
};
private
private: [lista_de_membros]
private class_base
Texto extraido dos manuais de C++ da Microsoft Corp e adaptado por Angelo Passaro. 1º semestre
Página 2/2
Quando o especifidador de acesso private precede uma lista de membros da classe, significa que esses
membros podem ser acessados somente por funções membro da classe ou friends da classe. Isto se aplica a
todos os membros declarados após o especificador até o próximo especificador de acesso, ou até o final da
classe.
Quando a palavra reservada private precede o nome de uma classe base, significa que todos os membros
public ou protected da classe base são membros private da classe derivada.
Para informações relacionadas a este tópico, consulte friend, public, protected, e Tabela de Privilégios de
Acesso a Membros.
Exemplo:
class BaseClass
{ public:
int pubFunc() { return privMem; }
private:
// privMem accessivel somente a partir de funções membro da classe
void privMem;
};
void main()
{
BaseClass aBase;
DerivedClass aDerived;
DerivedClass2 aDerived2;
aBase.privMem = 1; // Erro: privMem não é acessível
aDerived.privMem = 1; // Erro: privMem não é acessível na classe derivada
protected
protected: [lista_de_ membros]
protected class_base
Quando o especifidador de acesso protected precede uma lista de membros da classe, significa que esses
membros podem ser acessados somente por funções membro da classe ou friends da classe e por suas
Texto extraido dos manuais de C++ da Microsoft Corp e adaptado por Angelo Passaro. 1º semestre
Página 3/3
classes derivadas. Isto se aplica a todos os membros declarados após o especificador até o próximo
especificador de acesso, ou até o final da classe.
Quando a palavra reservada protected precede o nome de uma classe base, significa que todos os membros
public ou protected da classe base são membros protected da classe derivada.
Para informações sobre os tópicos relacionados, consulte public, private, friend, e Tabela de Privilégios de
Acesso a Membros.
Exemplo
class BaseClass
{
protected:
int protectFunc();
};
void main()
{
BaseClass aBase;
DerivedClass aDerived;
aBase.protectFunc(); // Erro: protectFunc não acessível
aDerived.protectFunc(); // Erro: protectFunc não acessível na classe derivada
}
A palavra reservada friend (amiga) permite o acesso de uma função, ou de uma classe aos membros
private e protected de uma outra classe.
Consulte, também,
Funções Friend
Uma função friend é uma função que não é membro de uma classe mas tem acesso aos seus dados
membros private e protected.
Uma função friend é declarada pela classe que está permitindo o acesso. A declaração friend pode ser
colocada em qualquer lugar na definição da classe. Ela não é afetada pela palavras reservadas de controle
de acesso.
Texto extraido dos manuais de C++ da Microsoft Corp e adaptado por Angelo Passaro. 1º semestre
Página 4/4
Exemplo 1
Classes Friend
Uma classe friend é uma classe na qual todas as funções membro são funções friend de outra classe. Em
outras palavras, as funções membro têm acesso aos dados membros de outra classe, mesmo que estes sejam
private ou protected.
Exemplo
class SuaClasse
{
friend class SuaOutraClasse; // Declara uma classe friend
private:
int topSecret;
};
class SuaOutraClasse
{
public:
void change( SuaClasse yc );
};
Texto extraido dos manuais de C++ da Microsoft Corp e adaptado por Angelo Passaro. 1º semestre
Página 5/5
A relação de amizade não é herdada, ou seja, classes derivadas de SuaOutraClasse não podem acessar os
dados membros privados de SuaClasse. A relação também não é transitiva, ou seja, classes que são
friends de SuaOutraClasse não podem acessar os dados membros privados de SuaClasse.
virtual declarador_funcao_membro
A palavra reservada virtual declara uma função virtual ou uma classe base virtual.
declarador_funcao_membro
especificador_acesso
Define o privilégio de acesso à classe base. Pode ocorrer antes ou após a palavra chave virtual.
nome_classe_base
Para mais informações, consulte Função Virtual, Funções Virtuais Puras e Abstratas, e Classe Base Virtual.
Texto extraido dos manuais de C++ da Microsoft Corp e adaptado por Angelo Passaro. 1º semestre
Página 6/6
Função Virtual
Uma função virtual é uma função membro que, se espera, será redefinida em classes derivadas. Quando nos
referimos a um objeto de uma classe derivada usando um ponteiro ou uma referencia à classe base,
podemos acionar uma função virtual para aquele objeto e executar a versão da função que corresponde à
classe derivada.
Exemplo 1
class Empregado
{
public:
virtual float calculePagamento();
};
Exemplo 2
Empregado umTrabalhador;
Vendedor umVendedor;
Empregado *p_empregado;
p_empregado = &umTrabalhador;
p_empregado->calculePagamento(); // executa Empregado::calculePagamento
p_empregado = &umVendedor;
p_empregado->calculePagamento(); // executal Vendedor::calculePagamento
A palavra reservada virtual é necessária somente na declaração da função da classe base; Todas as
declarações subsequentes em classes derivadas serão automaticamente virtuais.
A versão da função virtual correspondente à classe derivada deve apresentar a mesma lista de parâmetros e
tipo de retorno da função declarada na classe base. Se qualquer desses elementos for diferente, a função não
é considerada uma redefinição de função virtual.
Não se pode declarar uma instância (ou seja, um objeto) de uma classe abstrata pura. Ela pode ser utilizada
somente como uma classe base na definição de outras classes.
Texto extraido dos manuais de C++ da Microsoft Corp e adaptado por Angelo Passaro. 1º semestre
Página 7/7
Exemplo
Neste programa, desenha() é uma função virtual pura, definida na classe abstrata Forma. Objetos Forma
não podem ser declarados. Forma atua como uma classe base para Retangulo e Circulo. Retangulo e
Circulo fornecem definições para desenha(), e instâncias dessas classes podem ser utilizadas.
#include <iostream.h>
class Forma
{
public:
virtual void desenha() = 0; // declaração de uma função virtual pura.
// Portanto, a classe Forma é uma classe abstrata.
};
class Retangulo: public Forma // Classe Retangulo é derivada da classe Forma (Herança)
{
public:
void desenha();
};
class Circulo : public Forma // Classe Circulo é derivada da classe Forma (Herança)
{
public:
void desenha();
};
Cada objeto não virtual contem uma copia dos dados membros definidos na classe base. Esta duplicação
This duplication desperdiça espaço e requer que sejam especificadas quais cópias dos membros da classe
base são desejadas.
Quando uma classe base é especificada como uma base virtual, ela pode atuar como uma base indireta mais
do que uma vez sem duplicação de seus dados membros. Uma única cópia de seus dados membros é
compartilhada por todas as classes base que a utilizam como base virtual.
A palavra chave virtual é colocada na lista de bases das classes derivadas, e não a classe base.
Texto extraido dos manuais de C++ da Microsoft Corp e adaptado por Angelo Passaro. 1º semestre
Página 8/8