重载的赋值操作符成员函数可以声明为虚函数,为什么却不能继承啊
①可以是虚函数,却不能继承。
②它们同名,然而特征标不一样。
这两种情形都会导致基类指针或引用根据对象调用虚函数这一特性派不上用场,即使是虚函数也感觉没意义
那为什么不干脆禁止它是虚函数
例如基类base,派生类derive
derive do1;
base &br=do1;
.......
derive do2;
.......
br=do2;//只将do2的基类部分赋给了do1,而实际是想将do2的全部赋给do1
[解决办法]
应该是会继承的吧。不过继承的是
Derived& operator=(const Base&aa);
Derived& operator=(const Derived&aa);
#include <iostream>
using namespace std;
class Base{
public:
virtual Base& operator=(const Base&aa){
cout<<"Base operator= Base"<<endl;
return *this;
}
};
class Derived: public Base{
public:
Derived& operator=(const Base&aa){
cout<<"Derived operator= Base"<<endl;
return *this;
}
Derived& operator=(const Derived&aa){
cout<<"Derived operator= Derived"<<endl;
return *this;
}
};
int main(){
Base b1;
Derived d1, d2;
Base &br = d1;
br.operator=(b1);
br = d2;
d1 = d2;
return 0;
}
class Base{
virtual Base& operator=(const Base&aa){
};
class Derived: public Base{
Derived& operator=(const Base&aa){
cout<<"Derived operator= Base"<<endl;
return *this;
}
}