Como desenvolver um modelo de classe em c ++

Video: Tutorial Classe e Objetos em C++ (parte 1 de 2) pt-BR

modelos de classe executar o trabalho pesado dos tipos de modelo. Você usa um modelo de classe para definir objetos de praticamente qualquer tamanho. Na maioria dos casos, você usa classes para representar objetos complexos ou para executar tarefas mal adaptados para função ou estrutura modelos.

Você normalmente aulas de código em um arquivo separado usando o nome da classe como o nome do arquivo. A definição de classe aparece em um arquivo de cabeçalho, enquanto o código aparece em um arquivo de código. Para tornar as coisas um pouco mais fácil de entender, este exemplo evita a configuração normal e mostra o exemplo inteiro usando um único arquivo.

O exemplo mostra uma implementação da fila especializado. Ele inclui muitas das características de uma fila padrão e, em seguida, adiciona alguns recursos para atender às necessidades especiais de desenvolvimento. Filas e outros recipientes tendem a conter código complexo, mas você também precisa usá-los com uma variedade de tipos de dados, fazendo um modelo de classe da aplicação perfeita. o ClassTemplate exemplo aqui mostra o código para este exemplo.

#incluir #incluir using namespace std-modeloclasse MyQueue {protected: vector dados pública: void Add (const T &entrada) -void Remove () - PrintString void () - PrintInt void () - bool IsEmpty () -} - modeloMyQueue vazio:: Add (const T &input) {data.push_back (entrada) -} templateMyQueue vazio:: Remove () {data.erase (data.begin ()) -} templateMyQueue vazio:: PrintString () {vetor:: iterator PrintIt = data.begin () - enquanto (PrintIt = data.end ()!) {Cout lt; lt; * PrintIt lt; lt; endl-PrintIt ++ -}} templateMyQueue vazio:: PrintInt () {vetor:: iterator PrintIt = data.begin () - enquanto (PrintIt = data.end ()!) {Cout lt; lt; * PrintIt lt; lt; endl-PrintIt ++ -}} templateMyQueue bool:: IsEmpty () {return data.begin () == data.end () -} int main () {MyQueue StringQueue-cout lt; lt; StringQueue.IsEmpty () lt; lt; endl-StringQueue.Add ("Olá") -StringQueue.Add ("Adeus") -cout lt; lt; "cordas de impressão: " lt; lt; endl-StringQueue.PrintString () - cout lt; lt; StringQueue.IsEmpty () lt; lt; endl-StringQueue.Remove () - cout lt; lt; "cordas de impressão: " lt; lt; endl-StringQueue.PrintString () - StringQueue.Remove () - cout lt; lt; StringQueue.IsEmpty () lt; lt; endl-MyQueue IntQueue-IntQueue.Add (1) -IntQueue.Add (2) -cout lt; lt; "ints de impressão: " lt; lt; endl-IntQueue.PrintInt () - retorno 0-}

O exemplo começa com a classe MyQueue. Observe que dados é um vetor, não um fila como você poderia esperar. UMA fila é um adaptador - como tal, não fornece o suporte para muitas das características encontradas em recipientes, tais como vetor - um dos quais é o uso de iterators.

Este exemplo utiliza um iterator para impressão, por isso depende de uma vetor, em vez de um fila como um ponto de partida. Sempre que você criar sua própria versão especializada de uma construção comum, certifique-se de começar com o objeto certo. Caso contrário, você pode encontrar a experiência de criar a nova classe frustrante no mínimo, impossível, no pior caso.



MyQueue inclui a capacidade de adicionar, remover e elementos de impressão. Além disso, você pode verificar se a fila está vazio ou cheio. Você já viu o código para estas tarefas em outras partes do livro.

Você pode se perguntar sobre o código utilizado para a impressão. O exemplo inclui métodos separados para cordas de impressão e inteiros, o que pode parecer contraditório. Afinal, por que não simplesmente declarar o iterador da seguinte forma para que ele aceita qualquer tipo de dados:

vetor:: iterator PrintIt = data.begin () -

O problema é que o iterador requer um tipo de dados específico. Consequentemente, você deve declará-lo como mostrado. Caso contrário, você receber essa mensagem de erro inútil:

Video: Tutorial C++ - 15 - Criando Classes Em Arquivos Separados (Em Português)

erro: esperado `-` antes `PrintIt`

Em algum momento, você quer testar esta nova classe utilizando passos semelhantes aos encontrados em a Principal(). O teste verifica se a fila realmente não detectar os estados vazias e cheias, como adição e remoção de elementos funciona, e se as rotinas de impressão trabalhar. Aqui é a saída a partir deste exemplo:

1Printing cordas: cordas HelloGoodbye0Printing: ints Goodbye1Printing: 12

Publicações relacionadas