对象切片的原理
对象切片(Object Slicing)是 C++ 中的一种行为,发生在基类和派生类之间的赋值或传递操作中。当派生类对象赋值或传递给基类对象时,派生类的特有部分会被“切掉”,只保留基类的成员数据。这是因为基类只能容纳基类定义的成员,而派生类的扩展部分超出了基类的内存范围。
对象切片的发生场景
- 将派生类对象赋值给基类对象。
- 将派生类对象按值传递给接受基类对象的函数。
示例
#include <iostream>
#include <string>
class Base {
public:
std::string baseData;
Base(const std::string& data) : baseData(data) {
}
virtual void show() const {
std::cout << "Base: " << baseData << std::endl;
}
};
class Derived : public Base {