Срезка[Страуструп] или расщепление [Брюс Эккель] - неправильное использование преобразования типа производного класса, в результате чего происходит “срезка” типа и содержимого производного класса до содержимого базового класса.

Рассмотрим класс Point2d являющийся базовым для Point3d. В следующем примере происходит срезка объекта :

Point3d b;
Point2d a1 = b; //срезка!!

Чтобы срезки не происходило, необходимо не использовать передачу параметра по значению(как в примере), т.к. в этом случае вызывается конструктор копирования для базового класса(в этом и заключается причина срезки). Правильнее передавать параметры по ссылке или по указателю.

Более развернутый пример, иллюстрирующий срезку :

#include <iostream>
using std::cout;
struct Point {
    int x;
    int y;
    Point (int x_ = 0, int y_  = 0):
        x(x_), y(y_) { }
};

struct Point2d {
    Point one;
    Point two;
    virtual void foo () { cout << "foo" << endl; }
};

struct Point3d : Point2d {
    Point three;
    void foo () {
        cout << "!!foo" << three.x << "|" << three.y << endl;
    }
    Point3d() :
        three(10, 20)
        {}
};

int main() {
    Point3d b;
    b.foo();

    Point2d a1 = b; //здесь произойдет срезка!!
    a1.foo();

    Point2d& a = b;
    a.foo();

    Point2d* a2 = &b;
    a2->foo();
}