这段代码如果报错,将在哪里报错如果编译通过,会产生啥行为
1 可以编译通过2 执行B.act-----关键在于 *a = C() 这一步在类B的对象上执行了 类A的赋值操作符,没有修改a和b本身的值a和b 始终指向类B的对象。
■网友
无论b指向的内容如何,b->act都是调用B类的act函数。
■网友
public void 是什么 do是关键字 do while 不能作为函数名我知道你准备问继承但麻烦你先把代码整理清楚
■网友
如果题主这样写,在vs下这一行 *a = C(); 会被优化掉的因为这三个类全是空类,*a = C(); 是没意义的操作如果改成这样,结果有趣多了class A {public:\tA() :m_nNum(0)\t{\t\t\t}\tA(int num) :m_nNum(num)\t{\t}protected:\tint m_nNum;};class B : public A {public:\tB() :A(1){}\tvoid act() { printf("m_nNum:%d", m_nNum); }};class C : public A { };*a=C(); 这时会进行一次对象的赋值操作,默认是直接拷贝
而且这里拷贝的对象类型是父类的类型,也就是类A,如果我们给类A和类C都实现一个operator=成员函数,这里调用的是类的A的operator= 【这段代码如果报错,将在哪里报错如果编译通过,会产生啥行为】 
而a对象指向的实际是b对象的父类处,所以这一步操作实际是对b对象的父类进行一次赋值操作然后调用 b-\u0026gt;act(); 输出的结果就是 m_nNum:0
推荐阅读
- 如果你的多肉出现这个长势,要注意这个细节,多肉才会越来越美!
- 为啥看到书柜上的藏书会有心旷神怡的感觉
- 有啥方法,网站,项目可以自己练习计算广告学
- 某公司推出他们的3C产品,如果你是这个公司的电子商务运营主管,前期的运营你打算怎样开展这些工作
- 怎样对别人的代码进行适当修改使他永远也找不到问题出在哪
- 中年|如果汽车亏电:自动挡汽车能「推车点火」吗?
- 如果把DNS从godaddy转到DNSPOD是不是所有的二级域名都要重新设置,然后等这个各个ISP的缓存重新解析啊
- 插电源时,笔记本用不用拔电池?
- 如果做好一个手机股票软件
- 通过物理地址和IP地址能监控到啥
