在这种情况下会有物体切片吗?

时间:2018-03-15 11:39:59

标签: c++ class reference

给出下一个代码:

class A {
      // ...
};

class B : public A {
      // ...
};

并且:

A a;   
B b;    
A& ab = b;   
ab = a; 

将在此代码的最后一行切片?为什么?

1 个答案:

答案 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

您不能重新指定引用,以便引用另一个对象。