次のパターンはok/safeですか?あるいは何か欠点はありますか? (私も等価演算子のためにそれを使用)基本クラスの呼び出し演算子...安全?
Derived& operator=(const Derived& rhs)
{
static_cast<Base&>(*this) = rhs;
// ... copy member variables of Derived
return *this;
}
次のパターンはok/safeですか?あるいは何か欠点はありますか? (私も等価演算子のためにそれを使用)基本クラスの呼び出し演算子...安全?
Derived& operator=(const Derived& rhs)
{
static_cast<Base&>(*this) = rhs;
// ... copy member variables of Derived
return *this;
}
これは結構ですが、それは名前で基本クラスを呼び出すためにたくさんより読み私見です:
Base::operator = (rhs);
はい、それは安全です。同じことを行うには
別の構文は次のようになります。
Base::operator=(rhs);
(常にそれだけで明示的に定義されたもののために働くだろうと思った)この表記は、暗黙的に定義されたassignement事業者のaswellのために働くことに気づきました。また、これは派生クラスで行う必要があります –
あなたのベースクラスはstatic_castをが許可されていない純粋な仮想メソッドを持っているので、場合
Base::operator=(rhs);
を使用することをお勧めしますこと。
class Base {
// Attribute
public:
virtual void f() = 0;
protected:
Base& operator(const Base&);
}
class Derived {
public:
virtual void f() {};
Derived& operator=(const Derived& src) {
Base::operator=(src); // work
static_cast<Base&>(*this) = src; // didn't work
}
}
確かに...ちょうどそのキャストする必要が、実際にこれは良い方法である – smerlin