给出下一个代码:
class A {
// ...
};
class B : public A {
// ...
};
并且:
A a;
B b;
A& ab = b;
ab = a;
将在此代码的最后一行切片?为什么?
答案 0 :(得分:1)
不会有切片。但由于引用ab
的静态类型,将为A类调用复制赋值运算符。
考虑以下计划
#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;
}
它的输出是
A::operator = is called
您不能重新指定引用,以便引用另一个对象。