鱼C论坛

 找回密码
 立即注册
查看: 2374|回复: 1

将基类的复制运算符重载函数声明为纯虚函数,不能创建派生类?

[复制链接]
发表于 2016-3-27 11:37:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
基类的赋值运算符重载,然后声明为纯虚函数,并且该函数进行了实现,
派生类也进行了赋值运算符重载,并且进行了函数实现
但为什么派生类也成了抽象类?

我看网上对此的解释是说子类的参数不同,无法覆盖。
但这本身就2点错误啊:
1.派生类的方法的参数不同一样覆盖所有的基类的同名方法;
2,构造函数,析构函数,赋值运算符不参与继承。

如果说是因为赋值运算符不参与继承导致的,但为什么把基类的析构函数声明为纯虚函数,
子类不管是否显示定义析构函数,子类都不为抽象类?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-27 22:09:35 | 显示全部楼层
恩,自己挖的坑自己填吧,原来我对概念还是搞错了,
基类:
Base & operator=(const Base & r)=0;   //声明为纯虚函数,虽然这样声明没什么意义
子类:
Son & operator=(const Son & r);
这是我之前出错的地方,子类的参数是 Son的引用,参数和基类不同,这时发生的是重定义,隐藏了基类,但并没有重写(也就是覆盖)基类的纯虚函数。所以子类还是抽象类
如果把参数改为Base & r,则就是覆盖了,这时候,子类将不是抽象类。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 22:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表