muyu0096 发表于 2016-3-27 11:37:06

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

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

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

如果说是因为赋值运算符不参与继承导致的,但为什么把基类的析构函数声明为纯虚函数,
子类不管是否显示定义析构函数,子类都不为抽象类?

muyu0096 发表于 2016-3-27 22:09:35

恩,自己挖的坑自己填吧,原来我对概念还是搞错了,
基类:
Base & operator=(const Base & r)=0;   //声明为纯虚函数,虽然这样声明没什么意义
子类:
Son & operator=(const Son & r);
这是我之前出错的地方,子类的参数是 Son的引用,参数和基类不同,这时发生的是重定义,隐藏了基类,但并没有重写(也就是覆盖)基类的纯虚函数。所以子类还是抽象类
如果把参数改为Base & r,则就是覆盖了,这时候,子类将不是抽象类。
页: [1]
查看完整版本: 将基类的复制运算符重载函数声明为纯虚函数,不能创建派生类?