1.引出
如下场景:
由于b是double类型,所以赋值给int类型的引用前,要先进行隐式类型转换,这中间会生成临时对象,类是对象具有常性,所以int&之前应该加上const。
但是下面的场景:
没有出现报错!!!!
难道是没有产生临时对象吗?不是的。
c++规定,对于公有继承,父类和子类是个is-a的关系,将子类对象赋值给父类对象/指针/引用时,我们认为是天然的,中间不产生临时对象,这叫做父子类赋值兼容规则
2.赋值兼容规则
1.公有有继承中,派生类对象可以赋值给基类对象/指针/引用。形象的说法叫做切割或切片,就是将派生类中父类的那一部分切过去。
2.基类对象不能赋值给派生类对象
3.必须是公有继承
如上,当把public去掉后,就出错了。