O que é object slicing em C++ e como evitá-lo?
Olá! Recentemente comecei a estudar C++ e me deparei com um problema que não consigo entender. Tenho uma classe base `Animal` e uma classe derivada `Dog`, que adiciona um campo `breed`. Escrevi uma função que recebe `Animal` por valor. Quando passo um objeto `Dog` para ela, o compilador não dá erro, mas na função perco os dados sobre a raça (campo `breed`). Aqui está meu código:
```cpp
#include
#include
class Animal {
public:
Animal(const std::string& name) : name_(name) {}
virtual void speak() const { std::cout << "Animal sound\n"; }
std::string getName() const { return name_; }
private:
std::string name_;
};
class Dog : public Animal {
public:
Dog(const std::string& name, const std::string& breed)
: Animal(name), breed_(breed) {}
void speak() const override { std::cout << "Woof!\n"; }
std::string getBreed() const { return breed_; }
private:
std::string breed_;
};
void printAnimal(Animal a) { // Ao
No answers yet.
Faça login para deixar uma resposta
Blogs
Docker e TypeScript: conteinerização de aplicações do zero
Injeção de Dependência em C++: um guia simples para iniciantes
Por que Rust é popular: história da linguagem e 5 razões para seu sucesso
Por que \\d em regex é mais lento que [0-9]? Análise em C#