2 つのクラスがあるとします。
class DataStructure {
public:
DataStructure &operator=(const DataStructure &);
friend const DataStructure &operator+(int, const DataStructure &);
//...
};
class Array : public DataStructure {
public:
Array &operator=(const DataStructure &);
friend const Array &operator+(int, const Array &);
//...
};
andの freindにArray::operator=
andのfreindと同じことをさせたいのですが、, の代わりに,を返す必要があります。私は何十ものメソッドでそれを行う必要があるので、以下よりも簡単に実装する方法はありますか?Array
operator+
DataStructure::operator=
DataStructure
operator+
Array &
const Array &
DataStructure &
const DataStructure &
Array &Array::operator=(const DataStructure &other) {
return (Array &)DataStructure::operator=(other);
}
const Array &operator+(int x, const Array &other) {
return (const Array &)(x + (DataStructure)other);
}
編集:かなり悪いアイデアですが、別のアイデアを思いつきました:
class Array;
class DataStructure {
public:
//...
operator Array &() const;
};
//...
DataStructure::operator Array &() const {
return (Array &)*this;
}
この方法DataStructure
は、必要に応じて暗黙的に に変換されますが、次の例のように、との両方が有効であるが異なることを行うArray
場合を正しく処理することはできません。DataStructure
Array
//in class DataStructure:
public:
friend ostream &operator<<(ostream &os,const DataStructure &)
{ os << "DataStructure" << endl; return os;}
//in class Array:
public:
friend ostream &operator<<(ostream &os,const Array &)
{ os << "Array" << endl; return os;}
//...
int main() {
Array x;
cout << 1 + x << endl;
// output: "DataStructure" instead of "Array"
return 0;
}
ありがとうございます!