这个是不是反了呀,怎么看呢

img


(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&

你搞反了,base是基类,另一个是派生类

img

你提的这个问题很好,一看就是善于思考的人。。。
基类和派生类的区别就是,派生类是继承于基类,基类是父类,派生类是子类。。。
为什么是b1=d1,而不能反着来,你可以想象下,我定义一个基类的对象,能直接通过基类对象调用子类的函数吗?答案肯定是不行的,如果变成了d1=b1,那不就这个意思,你拿着基类的对象,想去冒充子类。。。。
最后,建议你下面几个文章,


C++中虚函数详解一_私房菜的博客-CSDN博客 前言: 长时间不做C++开发,对于虚函数这一块总是会忘记,索性总结下,下次看起来就方便了。希望高手不吝赐教。《C++基类指针和派生类成员》一文中提到了C++的多态性,都是跟基类的指针和引用有关系。而虚函数的存在就是为了动态多态的实现。本文就总结下虚函数。先来看个实例:class Base1 {public:Base1() : value(1) { cout << "B https://justinwei.blog.csdn.net/article/details/78616342

希望对你有所帮助,欢迎加入C/C++ 大家庭,你会发现越来越有趣。。。。