Classes de Visual C++ no Class Designer

Class Designer oferece suporte a classes C++ e visualiza as classes de C++ nativos da mesma forma como as formas de classe de Visual Basic e C# Visual, exceto pelo fato de classes C++ podem ter várias relações de herança. Você pode expandir a forma de classe para mostrar mais campos e métodos na classe ou recolhê-lo para economizar espaço.

ObservaçãoObservação

Class Designer não oferece suporte a uniões (um tipo especial de classe na qual a memória alocada é de apenas a quantidade necessária para o membro de dados maior da união).

Herança Simple

Quando você arrasta mais de uma classe um diagrama de classe e as classes têm uma relação de herança de classe, uma seta conecta-los. Os pontos de direção na direção da classe base. Por exemplo, quando as seguintes classes são exibidas em um diagrama de classe, uma seta conecta-los, apontando-se de b para a:.

class A {};
class B : A {};

Pode também arrastar a única classe b para o diagrama de classe, com o botão direito na forma de classe b e em Mostrar Classes de Base. Isso exibirá sua classe base: .

Herança múltipla

Class Designer oferece suporte a visualização das relações de herança de classe de múltiplos. Herança múltipla é usado quando uma classe derivada tem atributos de mais de uma classe base. Veja a seguir um exemplo de herança múltipla:

class Bird {};
class Swimmer {};
class Penguin : public Bird, public Swimmer {};

Quando você arrastar mais de uma classe para o diagrama de classe e as classes têm um relacionamento de herança de classe de múltiplos, uma seta conecta-los. Os pontos de direção na direção das classes base.

Clicando com o botão direito na forma de uma classe e, em seguida, clicando em Mostrar Classes Base exibe as classes base para a classe selecionada.

ObservaçãoObservação

O Mostrar Classes derivadas de comando não é suportado para código C++. Você pode exibir as classes derivadas, indo para a exibição de classe, expandindo o nó do tipo, expandindo o Tipos derivados de subpasta e arrastar esses tipos de diagrama de classe.

Para obter mais informações sobre herança de classe de múltiplos, consulte Multiple Inheritance e Multiple Base Classes.

Classes abstratas

Class Designer oferece suporte a classes abstratas (também chamados de "classes base abstratas"). Essas são classes que você instancia nunca, mas do qual você pode derivar a outras classes. Usando um exemplo de "Herança múltipla" anteriormente contidas neste documento, você pode criar uma instância de Bird classe como objetos individuais, como a seguir:

int main()
{
   Bird sparrow;
   Bird crow;
   Bird eagle;
}

No entanto, talvez não pretende criar uma instância de Swimmer classe como objetos individuais. Pode pretender apenas derivar outros tipos de classes animais, por exemplo, Penguin, Whale, e Fish. Nesse caso, você deve declarar o Swimmer classe como uma classe de base abstrata.

Para declarar uma classe como abstrata, você pode usar o abstract palavra-chave. Membros marcado como abstract ou incluídos em uma classe abstrata, são virtuais e devem ser implementados pelas classes que derivam da classe abstrata.

class Swimmer abstract
{
   virtual void swim();
   void dive();
};

Também é possível declarar uma classe como abstrata, incluindo pelo menos um de função virtual pura:

class Swimmer
{
   virtual void swim() = 0;
   void dive();
};

Quando você exibe essas declarações em um diagrama de classe, o nome da classe Swimmer e sua função virtual pura swim são no exibido em itálico na forma de uma classe abstrata, juntamente com a notação Classe abstrata. Observe que a forma de tipo de classe abstrata é a mesma de uma classe regular, exceto que sua borda é uma linha pontilhada.

Uma classe derivada de uma classe base abstrata deve substituir cada função virtual pura na classe base ou a classe derivada não pode ser instanciada. Assim, por exemplo, se você derivar um Fish classe a partir de Swimmer classe, Fish deve substituir o swim método:

class Fish : public Swimmer
{
   void swim(int speed);
};

int main()
{
   Fish guppy;
}

Quando você exibe esse código em um diagrama de classe, o Class Designer desenha uma linha de herança de Fish para Swimmer.

Classes anônimas

Class Designer oferece suporte a classes anônimas. Tipos de classe anônima classes declarados sem um identificador. Eles não podem ter um construtor ou destrutor, não podem ser passados como argumentos para funções e não podem ser retornados como valores de retorno de funções. Você pode usar uma classe anônima para substituir um nome de classe com um nome de typedef, como no exemplo a seguir:

typedef struct
{
    unsigned x;
    unsigned y;
} POINT;

Estruturas também podem ser anônimas. Class Designer exibe anônimos classes e estruturas o mesmo que ele exibe o respectivo tipo. Embora você possa declarar e exibir as estruturas e classes anônimas, o Class Designer não usará o nome da marca que você especificar. Ele usará o nome que gera de modo de exibição de classe. A classe ou estrutura aparece no modo de exibição de classe e o Class Designer como um elemento chamado __unnamed.

Para obter mais informações sobre classes anônimas, consulte Anonymous Class Types.

Classes de modelo

Class Designer oferece suporte a visualização das classes de modelo. Declarações aninhadas são suportadas. A tabela a seguir mostra algumas declarações típicas.

Elemento de código

O modo de exibição de Designer de classe

template <class T>

class A {};

A<T>

Classe de modelo

template <class T, class U>

class A {};

A<T, U>

Classe de modelo

template <class T, int i>

class A {};

A<T, i>

Classe de modelo

template <class T, template <class K> class U>

class A {};

A<T, U>

Classe de modelo

A tabela a seguir mostra alguns exemplos de especialização parcial.

Elemento de código

O modo de exibição de Designer de classe

template<class T, class U>

class A {};

A<T, U>

Classe de modelo

template<class T>

class A<T, T> {};

A<T, T>

Classe de modelo

template <class T>

class A<T, int> {};

A<T, int>

Classe de modelo

template <class T1, class T2>

class A<T1*, T2*> {};

A<T1*, T2*>

Classe de modelo

A tabela a seguir mostra alguns exemplos de herança na especialização parcial.

Elemento de código

O modo de exibição de Designer de classe

template <class T, class U>

class A {};

template <class TC>

class A<T, int> {};

class B : A<int, float>

{};

class C : A<int, int>

{};

A<T, U>

Classe de modelo

B

Class

(pontos de classe)

C

Class

(pontos de classe)

A tabela a seguir mostra alguns exemplos de especialização parcial de funções do modelo.

Elemento de código

O modo de exibição de Designer de classe

class A

{

template <class T, class U>

void func(T a, U b);

template <class T>

void func(T a, int b);

};

A

func < T, U > (+ 1 sobrecarga)

template <class T1>

class A {

template <class T2>

class B {};

};

template<> template<>

class A<type>::B<type> {};

A<T1>

Classe de modelo

B<T2>

Classe de modelo

(B está contido na classe A, em Tipos aninhados)

template <class T>

class C {};

class A : C<int> {};

A

Class

-> C <int>

C<T>

Classe de modelo

A tabela a seguir mostra alguns exemplos de herança do modelo.

Elemento de código

O modo de exibição de Designer de classe

template <class T>

class C {};

template<>

class C<int> {

class B {};

}

class A : C<int>::B {};

A

Class

-> b

C<int>

Class

(B está contido dentro de classe c em Tipos aninhados)

C<T>

Classe de modelo

A tabela a seguir mostra alguns exemplos de conexão de canônico classe especializados.

Elemento de código

O modo de exibição de Designer de classe

template <class T>

class C {};

template<>

class C<int> {};

class A : C<int> {};

class D : C<float> {};

A

Class

-> c <int>

C<int>

Class

C<T>

Classe de modelo

D

Class

-> c <float>

class B {

template <class T>

T min (const T &a, const T &b);

};

B

min <T>

Consulte também

Referência

Classes, Structures, and Unions

Anonymous Class Types

Multiple Inheritance

Multiple Base Classes

Conceitos

Trabalhando com o código do Visual C++ (Designer de classe)

Outros recursos

Templates