(1)不是应该d1=b1吗
派生类对象可以赋值给基类对象,是派生类把值给基类吧。
b1=d这句话所包含的意义,你可能还没学到。
也就是说b1=d发生了什么?
c语言里面int a,b;
a=b,不过是先把b的值放到寄存器中,再把寄存器里面的值复制到a,那么对于类就不太一样了,因为int只有4个字节,可以放到寄存器里面,一个类一般放不下,
所以b1=d,其实是b1.operator=(d); operator= 是重载运算符,当你定义一个类时,编译器会默认提供3个函数,默认构造函数,拷贝构造函数,和赋值函数就是operator=它的原型是
Base& operator=(const Base& rh),结合b1=d,就是调用operator=(d),也就是把d转为了const Base&