构造对象是的问题
A* pa=(A*)new B();
B* pb=new B();
A* pa2=pb;
着两种写法有什么区别呢 好像他们在调用方法时不太一样哦
请分析分析
[解决办法]
开过贴吧?那两种方法的结果是一样的
第一种方法很少有人用吧,
因为如果有虚函数的话,
它的强型转换(A*)根本不起作用.
通过pa仍然可以调用B的虚函数
第二种方法也是拐个弯,
其实直接写成A* p=new B就完了
[解决办法]
pa和pa2两个指针所指对象完全没有区别,都是new的B。调用方法不同关键是看你通过哪种指针去调用A*还是B*,然后还要看你调用的方法是否virtual。
假设都是通过派生类对象调用派生类和基类都有的同名方法
过基类指针 通过派生类指针
virtual方法 派生类的方法 派生类的方法
非virtual方法 基类的方法 派生类的方法
[解决办法]
这也是多态的关键所在哦,假设你通过同一个基类派生N种派生类,然后通过一个基类指针数组,各自new出不同的派生类对象,通过循环调用某一个virtual方法,会调用到各个不同派生类的那个方法,这就是多态的运用吧?我理解是这样子