c++中使用new后的强制类型转换问题

如下图所示:
定义一个A的实例指针,但是用的是new B,前面不用自己加上强制类型转换么?
C++学得不多,请会的 人指点一下,多谢!

这不需要类型转换。
因为类B是类A的派生类(子类),具备基类(父类)A的一切特征(A类中所有的成员B类都有),所以使用派生类的构造函数构造的对象可以直接使用A类的引用。
我们一般习惯把这种使用派生类的构造函数构造对象并由基类的句柄(指针)来引用的对象称为“上转型”对象。
使用上转型对象需要注意,无法使用派生类独有而基类中没有的成员,另外,如果派生类有重写基类的虚函数,调用上转型对象的成员函数时,将执行派生类重写的虚函数中的内容而不执行基类中的对应成员函数的内容。这是多态的一种实现方式。
上转型对象中,用作引用的基类可以是抽象类,还可以是虚基类(相当于Java中的接口)。而且,抽象类和虚基类(接口)不能直接创建对象实例,只能用它的派生类(或实现类)的构造函数来创建抽象类或虚基类(接口)类型的对象实例。(比如说,如果题中的类A是抽象类,使用A *a=new A()是错误的,只能使用A *a=new B()来创建类A类型的对象实例。)

关于题目:
这个题目中的程序在运行时可能出现的问题是:类B中的函数f与从类A继承的函数f同名(且参数、返回值都相同,不存在重载的问题),而且不是重写(类A中的函数f不是虚函数,无法重写),可能造成成员名冲突。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-08
当然不用了,这里B继承自A,所以B里是有A的虚函数表,而且父类指针指向子类对象构成多态了。
相似回答