Back to slide -- Keyboard shortcut: 'u'  previous -- Keyboard shortcut: 'p'  next -- Keyboard shortcut: 'n'          slicing/slice-2.cc - Does this variant change the game.Lecture 5 - slide 5 : 40
Program 3

// For the exercise. Class B inherits from A. Illustration of slicing.
// A minor variant of the previous program, where the formal parameter of f is of type A&.  Reveal answer...

#include <iostream>
#include <string>

using namespace std;

class A {
public:
  int a;

  A(): a(3){
  }

  virtual int op(){
     cout << "A: operation" << endl;
     return a;
  }
};

class B: public A {
public:
  int b;

  B():  b(5){
  }

  int op() override {
     cout << "B: operation" << endl;
     return b;
  }
};

int f(A &x){       // Was   int f(B &x)   in the earlier version.
  A  y = x,        // The B object x is sliced: The B part is lost.
    *z = &x,       // No slicing. The B object is accessed via pointer.
    &w = x;        // No slicing. The B object is accessed via a reference.

  cout << y.op() << endl;    // 3.  A operation. y has been sliced to an A object.
  cout << z->op() << endl;   // 5.  B operation. z points at a B object.
  cout << w.op() << endl;    // 5.  B operation. w is an alias to aB from main.
                             // So did anything change?   NO  
}

int main(){
  B aB;
  f(aB);
}