In C++, object slicing occurs when a derived class object is assigned to a base class object. This results in the loss of the derived class's additional properties and methods. To avoid slicing when dealing with polymorphism, always use pointers or references to base class objects. This allows you to maintain the complete state and behavior of derived class objects.
Here is an example of how to properly use polymorphism to avoid slicing:
class Base {
public:
virtual void show() {
std::cout << "Base class" << std::endl;
}
virtual ~Base() {}
};
class Derived : public Base {
public:
void show() override {
std::cout << "Derived class" << std::endl;
}
};
void display(Base* b) {
b->show(); // Correctly calls the derived class's show function
}
int main() {
Derived d;
display(&d); // Pass a pointer to the derived object
return 0;
}
How do I avoid rehashing overhead with std::set in multithreaded code?
How do I find elements with custom comparators with std::set for embedded targets?
How do I erase elements while iterating with std::set for embedded targets?
How do I provide stable iteration order with std::unordered_map for large datasets?
How do I reserve capacity ahead of time with std::unordered_map for large datasets?
How do I erase elements while iterating with std::unordered_map in multithreaded code?
How do I provide stable iteration order with std::map for embedded targets?
How do I provide stable iteration order with std::map in multithreaded code?
How do I avoid rehashing overhead with std::map in performance-sensitive code?
How do I merge two containers efficiently with std::map for embedded targets?