이 코드에서는 + = 기본적으로 과부하를 시도합니다. 모든 것이 비회원 파트에서 괜찮아 보이지만 멤버가 아닌 함수를 작성할 때 (이 부분에서 + 연산자) 은 잘못된 추상 반환 유형을 잘못 나타내며 + = operation이 vector1d 내에서 순수하다고 말합니다. 이 문제를 어떻게 해결할 수 있습니까? AbstractBase
재정의 된 함수를 사용하는 비 멤버 함수를 만들려면 어떻게해야합니까?
Vector1d &operator+=(const Vector1d &other);
에서
class AbstractBase{
public:
virtual AbstractBase &operator+=(const AbstractBase &other)=0;
private:
}
////
class Vector1d:public AbstractBase{
public:
Vector1d &operator+=(const Vector1d &other);
private:
int size_;
vector<double> data_;
}
//non member func
Vector1d operator+(const Vector1d& vec1, const Vector1d& vec2);
///
Vector1d &Vector1d::operator+=(const Vector1d &other){
cout<<"sum operator is called"<<endl;
for(int i = 0; i < other.size_ ; i++)
data_.at(i) += other.data_.at(i);
return *this;
}
Vector1d operator+(const Vector1d& vec1, const Vector1d& vec2){
return (Vector1d) vec1 += vec2;
};
운영자가 순수 가상이 될 수 있습니까? – Bcan
문제는 연산자 + = (AbstratctBase)와 연산자 + = (Vector1d)가 다른 서명을 가지므로 후자는 첫 번째를 재정의하지 않는다는 것입니다. – z32a7ul
가상 함수의 반환 유형 만이 공변이지만 인수 유형이 아닙니다. –