我不太明白为什么对于赋值,派生类不会调用基类的相应运算符,如果它自己不存在的话.看看代码:
#include <iostream>
using namespace std;
class A{
protected:
void myWrite(){
cout << " Base " <<endl;
}
public:
double x,y;
A(): x{0},y{0}{};
virtual A & operator=(double g){x=g;y=g;return *this;}
virtual ~A(){};
virtual void doneit(){myWrite();}
};
class B: public A{
protected:
public:
B():A(){};
virtual ~B(){};
virtual void doneit(){myWrite();}
};
int main() {
A jj;
B pp;
pp=0.0;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因为它是代码不编译.当然,如果我为B定义一个"运算符="与A的相同,那么一切正常,但是为什么默认情况下不调用B"operator ="如果未定义派生类中的那个?你能帮忙解释一下这个问题吗?
gcc编译器说../src/tito.cpp:40:4:错误:没有可行的重载'='pp = 0.0; ~~ ^ ~~~ ../src/tito.cpp:28:7:注意:候选函数(隐式复制赋值运算符)不可行:对于第一个参数类B,没有已知的从'double'到'const B'的转换:public A {^ 1错误生成.
你能解释一下为什么它不起作用吗?