![]() ![]() ![]() ![]() | Does this variant change the game?. | Lecture 4 - slide 3 : 24 Program 3 |
// Class B inherits from A. Illustration of slicing. // A minor variant of the previous program. #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(){ 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); }