Tipos de herança em C++ O que você deve saber?
Publicados: 2023-04-05Você já se perguntou como alguns sistemas de software populares são construídos? Tudo graças a um poderoso mecanismo chamado herança na programação orientada a objetos (OOP). A herança permite que os programadores criem novas classes baseadas nas existentes, permitindo a reutilização de código e o desenvolvimento eficiente de software. Imagine que você está construindo um sistema que requer várias classes, cada uma compartilhando alguns atributos e comportamentos comuns.
Em vez de escrever o mesmo código repetidamente, você pode usar a herança para criar uma classe base e derivar novas classes dela, economizando tempo e esforço.
A herança não é apenas eficiente, mas também versátil. Em C++, existem vários tipos de herança, cada um com benefícios e casos de uso exclusivos.
Neste artigo, daremos uma olhada completa nos diferentes tipos de herança em C++ , fornecendo códigos relevantes, explicações e exemplos da vida real ao longo do artigo.
Índice
Diferentes tipos de herança em C++
A linguagem de programação C++ oferece cinco tipos diferentes de opções de herança para seus programadores. Dependendo do contexto e dos requisitos, desenvolvedores e programadores podem trabalhar com qualquer um desses tipos de herança.
Herança Única
A herança única é o tipo mais comum de herança em C++. Na herança única, uma classe derivada herda de uma única classe base. Isso significa que uma classe herda todos os membros de dados públicos e protegidos e funções de membro da classe base, tendo a capacidade de adicionar seus próprios membros de dados e funções de membro.
Confira o trecho de código abaixo para obter a sintaxe e a compreensão da herança única:
// Classe Base
classe Animal {
público:
void comer() {
std::cout << “O animal está comendo” << std::endl;
}
};
// Classe derivada
class Cachorro : public Animal {
público:
void latido() {
std::cout << “Cachorro está latindo” << std::endl;
}
};
Neste exemplo, temos uma classe base chamada Animal com uma única função de membro eat().Em seguida, definimos uma classe derivadaDog que herda publicamente de Animal.Dog também tem sua própria função de membro bark().Usando herança simples,Dog pode acessar a função eat()daclasse Animale adicionar seu próprio comportamento com afunção bark().
Quando usar herança única em C++
Os programadores podem usar herança única para criar uma classe derivada que adiciona funcionalidade à classe base.
Por exemplo, você pode usar herança única ao criar um jogo envolvendo diferentes personagens, como guerreiros, magos e arqueiros. Todos esses personagens compartilham alguns atributos e comportamentos comuns, como pontos de saúde, poder de ataque e velocidade de movimento. Usando herança única, você pode criar uma classe base chamada Character que contém os atributos e comportamentos comuns e derivar cada classe de caractere para adicionar sua funcionalidade exclusiva.
Na herança múltipla, uma classe derivada pode herdar de várias classes base. Isso significa que uma classe pode ter mais de uma classe pai direta. Como resultado, a classe derivada herda todos os membros de dados públicos e protegidos e funções de membro de cada classe base.
Aqui está um exemplo de herança múltipla:
// Classe Base 1
classe Forma {
público:
área dupla virtual() = 0;
};
// Classe Base 2
classe Cor {
público:
virtual std::string getColor() = 0;
};
// Classe derivada
classe Retângulo: forma pública, cor pública {
público:
substituição de área dupla () {
largura de retorno * altura;
}
std::string getColor() override {
cor de retorno;
}
privado:
largura dupla = 5,0;
altura dupla = 3,0;
std::string cor = “azul”;
};
Neste exemplo, temos duas classes base, Shape e Color , cada uma com sua função virtual.Em seguida, definimos uma classe derivadaRectangle que herda de Shape e Color.Rectangle substitui as funções virtuais de ambas as classes base para fornecer sua própria implementação. Usando herança múltipla,Rectangle pode herdar as propriedades de ambas as classes base, ShapeeColor, para criar um retângulo com uma cor e área específicas.
Quando usar herança múltipla em C++
Use herança múltipla quando quiser combinar a funcionalidade de várias classes base. Por exemplo, considere um aplicativo GUI que requer diferentes tipos de controles, como botões, caixas de seleção e caixas de texto. Cada tipo de controle tem sua funcionalidade e comportamento, mas também compartilham algumas funcionalidades comuns, como manipulação de eventos do usuário e exibição de texto.
Usando herança múltipla, você pode criar uma classe base chamadaControl que contém a funcionalidade comum e derivar cada tipo de controle dela, bem como outras classes base que contêm sua funcionalidade específica.
Na herança hierárquica, uma única classe base é herdada por várias classes derivadas. Como a herança múltipla, as classes derivadas na herança hierárquica obtêm todos os membros de dados públicos e protegidos e as funções de membro da classe base.
Aqui está um trecho de código para ajudá-lo a entender a implementação da herança hierárquica em C++:
// Classe Base
classe Animal {
público:
virtual void makeSound() = 0;
};
// Classe derivada 1
classe Gato: public Animal {
público:
void makeSound() substituição {
std::cout << “Miau” << std::endl;
}
};
// Classe derivada 2
class Cachorro : public Animal {
público:
void makeSound() substituição {
std::cout << “Woof” << std::endl;
}
};
Neste exemplo, temos uma classe base chamada Animal com uma função virtual makeSound().Em seguida, definimos duas classes derivadas,Cat e Dog, ambas herdadas deAnimal. Cada classe derivada substitui a funçãomakeSound() para fornecer sua própria implementação.Usando herança hierárquica, podemos criar diferentes tipos de animais que compartilham comportamentos comuns, como fazer um som.
Quando usar herança hierárquica em C++
Use herança hierárquica quando quiser criar várias classes derivadas que compartilham funcionalidade comum. Por exemplo, considere um aplicativo bancário que requer diferentes tipos de contas, como contas de poupança, contas correntes e contas de cartão de crédito. Todos esses tipos de conta compartilham alguns atributos e comportamentos comuns, como número da conta, saldo e taxa de juros.
Usando a herança hierárquica, você pode criar uma classe base chamada Account que contém os atributos e comportamentos comuns e derivar cada tipo de conta dela para adicionar sua funcionalidade exclusiva.
Herança Multinível
A herança multinível em C++ é um tipo de herança em que uma classe derivada é herdada por outra classe derivada. Nesse cenário, a classe derivada herda todos os membros de dados públicos e protegidos e funções de membro de sua classe pai imediata, que por sua vez herda de sua própria classe pai e assim por diante.
Aqui está como você pode implementar programaticamente a herança multinível em C++:
// Classe base
classe Veículo {
público:
void iniciar() {
std::cout << “Veículo está dando partida” << std::endl;
}
};
// Classe Intermediária
classe Carro : Veículo público {
público:
void drive() {
std::cout << “O carro está andando” << std::endl;
}
};
// Classe derivada
class SportsCar : Public Car {
público:
void acelerar() {
std::cout << “Carro esportivo está acelerando” << std::endl;
}
};
Quando usar herança multinível em C++
Use a herança multinível quando quiser criar uma classe derivada que herda de outra classe derivada e adiciona sua funcionalidade. Por exemplo, considere um sistema de software que requer diferentes tipos de veículos, como carros, caminhões e motocicletas. Esses tipos de veículos compartilham alguns atributos e comportamentos comuns, como velocidade, aceleração e frenagem.
Ao usar a herança multinível, você pode criar uma classe base chamada Vehicle que contém os atributos e comportamentos comuns e derivar dela classes intermediárias, como CareTruck, para adicionar sua funcionalidade específica. Em seguida, você pode derivar aclasse SportsCar da classe Carpara adicionar sua funcionalidade exclusiva.
A herança híbrida é uma combinação de dois ou mais tipos de herança. Também conhecida como herança virtual, uma classe derivada na herança híbrida herda de várias classes base, algumas das quais são herdadas por meio de vários caminhos. Isso pode criar hierarquias de herança complexas e pode ser difícil de entender e manter.
Confiraos cursos de desenvolvimento de software da upGradpara se aprimorar.
Aqui está um exemplo de herança híbrida em C++:
// Classe Base 1
classe Animal {
público:
virtual void makeSound() = 0;
};
// Classe base 2
classe CanFly {
público:
virtual void fly() = 0;
};
// Classe Base 3
classe pode nadar {
público:
virtual void nadar() = 0;
};
// Classe derivada
class Morcego: public Animal, public CanFly {
público:
void makeSound() substituição {
std::cout << “Screech!”<< std::endl;
}
void fly() substituição {
std::cout << “Morcego está voando” << std::endl;
}
};
// Classe derivada
class Penguin : public Animal, public CanSwim {
público:
void makeSound() substituição {
std::cout << “Hooonk!”<< std::endl;
}
void nadar () substituição {
std::cout << “O pinguim está nadando” << std::endl;
}
};
Explore nossos cursos populares de engenharia de software
Mestre em Ciência da Computação pela LJMU & IIITB | Programa de Certificação de Cibersegurança Caltech CTME |
Bootcamp de Desenvolvimento Full Stack | Programa PG em Blockchain |
Programa Executivo PG em Desenvolvimento Full Stack | |
Veja todos os nossos cursos abaixo | |
Cursos de Engenharia de Software |
Quando usar herança híbrida em C++
Além dos quatro tipos de herança discutidos anteriormente, a herança híbrida pode ser útil em determinados cenários em que vários tipos de herança são necessários. Use herança híbrida para combinar os benefícios de vários tipos de herança.
Por exemplo, considere um sistema de software que requer diferentes tipos de animais, alguns dos quais podem voar enquanto outros podem nadar. Você pode usar a herança híbrida para criar uma classe base chamada Animal e derivar dela duas classes intermediárias, CanFlyeCanSwim. Finalmente, usando herança híbrida, você pode derivar as classesBat e Penguinde ambas as classes intermediárias. A classeBat herdaria de AnimaleCanFly, enquanto a classePenguinherdaria deAnimaleCanSwim. Dessa forma, você pode criar diferentes tipos de animais com combinações únicas de habilidades.
A herança híbrida em C++ pode ser útil em sistemas de software complexos em que vários tipos de herança são necessários. No entanto, também pode criar hierarquias de herança complexas que podem ser difíceis de entender e manter. Tal como acontece com outros tipos de herança, é crucial escolher o tipo certo para seus requisitos específicos de projeto de desenvolvimento de software e objetivos de design.
Leia nossos artigos populares relacionados ao desenvolvimento de software
Confira nossoscursos de tecnologia gratuitos para obter uma vantagem sobre a concorrência.
Coisas importantes a ter em mente ao usar herança:
Embora a herança seja um mecanismo poderoso em C++, ela também tem alguns fatores a serem considerados ao implementá-la.
- Evite Hierarquias de Herança Profundas : Hierarquias de herança profundas podem levar a códigos difíceis de ler, entender e manter.Mantenha suas hierarquias de herança o mais superficial possível para melhorar a legibilidade e a manutenção do código.
- Use os modificadores de acesso com sabedoria: os modificadores de acesso (público, protegido e privado) controlam a visibilidade dos membros de dados e funções de membro em uma classe.Use-os com sabedoria para evitar expor detalhes de implementação que não devem ser visíveis fora da classe.
- Evite a herança Diamond: A herança Diamond ocorre quando uma classe herda de duas classes que herdam da mesma classe base.Isso pode levar a ambiguidade e geralmente é melhor evitar.
- Evite o uso excessivo de herança: Embora a herança possa ser útil, é importante evitar o uso excessivo dela.Em alguns casos, a composição ou outros padrões de design podem ser uma escolha melhor.
Explore nossos cursos gratuitos de desenvolvimento de software
Fundamentos da Computação em Nuvem | Noções básicas de JavaScript do zero | Estruturas de Dados e Algoritmos |
Tecnologia Blockchain | Reagir para iniciantes | Noções básicas de Java |
Java | Node.js para Iniciantes | JavaScript Avançado |
Remover
Para resumir, a herança é um conceito crucial na programação C++ que todo estudante de programação deve dominar. Compreendendo os diferentes tipos de herança e seus casos de uso, você pode criar um código eficiente, organizado e sustentável, tornando-se um desenvolvedor de software melhor.
Se você achou este artigo interessante, pode aprimorar ainda mais seu conhecimento sobre desenvolvimento de software inscrevendo-se no programa de certificação DevOps da upGrad, oferecido em colaboração com o IIIT Bangalore. Este programa abrange vários aspectos do desenvolvimento de software, incluindo codificação, teste e implantação, e pode ajudá-lo a se tornar um desenvolvedor de software qualificado no setor.
Por que a herança é importante na programação C++?
Com a utilização da herança, os programadores podem economizar tempo e esforço no desenvolvimento de software para construir sistemas de software complexos de maneira organizada. À medida que os programadores trabalham para criar códigos mais legíveis, o processo de codificação é simplificado.
Quais são as coisas importantes a serem lembradas ao usar herança na programação C++?
Ao usar herança na programação C++, é essencial manter algumas coisas cruciais em mente, como evitar hierarquias profundas de herança, usar modificadores de acesso com sabedoria, evitar herança diamante e não usar herança em excesso.
Que tipo de herança devo usar para meu projeto de desenvolvimento de software?
A escolha do tipo correto de herança depende dos requisitos específicos do projeto de desenvolvimento de software e dos objetivos de design. A seleção de vários tipos de herança depende inteiramente dos requisitos do seu projeto. Portanto, faça uma análise detalhada antes de prosseguir com ela.