关于C++指针

[复制链接]
2072|2
 楼主| sinadz 发表于 2012-3-20 18:05 | 显示全部楼层 |阅读模式
想请问下一下这两种赋值方式的区别:

假设我有两个类,基类Base,其继承类Inherit,ptr为Base*类型的指针。
现有一个虚构函数func

1)
Inherit it(....); //继承类构造函数Inhrit(....)
ptr=⁢

2)
ptr=&Inherit(....);

如果使用1)中ptr调用func,则使用的是继承类中的版本
如果用2)中的ptr调用func,则为基类中的版本

这是为什么呢??
火箭球迷 发表于 2012-3-20 18:11 | 显示全部楼层
一)构造函数是不能使虚构函数的

因为继承类在形成对象时,构造是从基类开始的,由里向外,如果存在构造的虚函数,又怎么能构造成功呢。
火箭球迷 发表于 2012-3-20 18:11 | 显示全部楼层
二)虚函数的重载性要求函数原型相同(析构函数例外,这是析构函数可以使虚函数的原因)

1)如果仅仅返回类型不同,其余相同,则C++认为是错误重载。
2)如果函数原型不同,仅函数名相同,则C++认为是一般重载,因而丢失虚特性
您需要登录后才可以回帖 登录 | 注册

本版积分规则

304

主题

2313

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部