given the next code:
class A {
// ...
};
class B : public A {
// ...
};
And:
A a;
B b;
A& ab = b;
ab = a;
Will be a slicing in the last line of this code? Why?
given the next code:
class A {
// ...
};
class B : public A {
// ...
};
And:
A a;
B b;
A& ab = b;
ab = a;
Will be a slicing in the last line of this code? Why?
There will not be slicing. But there will be called the copy assignment operator for the class A due to the static type of the reference ab
.
Consider the following program
#include <iostream>
struct A
{
A & operator =( const A & )
{
std::cout << "A::operator = is called" << std::endl;
return *this;
}
};
struct B : A
{
B & operator =( const B & )
{
std::cout << "B::operator = is called" << std::endl;
return *this;
}
};
int main()
{
A a;
B b;
A &ab = b;
ab = a;
return 0;
}
Its output is
A::operator = is called
You may not reassign a reference such a way that it would refer another object.