потому что если ваш базовый класс имеет чисто виртуальный метод, то static_cast не разрешается.

ющий шаблон в порядке / безопасно? Или есть какие-то недостатки? (Я также использую это для операторов равенства)

Derived& operator=(const Derived& rhs)
{
    static_cast<Base&>(*this) = rhs;
    // ... copy member variables of Derived
    return *this;
}

Ответы на вопрос(3)

Это лучше использовать

Base::operator=(rhs);

потому что если ваш базовый класс имеет чисто виртуальный метод, то static_cast не разрешается.

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
        }
}
Решение Вопроса

но гораздо более читабельно ИМХО вызывать базовый класс по имени:

Base::operator = (rhs);
 smerlin19 янв. 2011 г., 12:55
действительно ... только что заметил, что эта нотация работает и для неявно определенных операторов присваивания (всегда думала, что будет работать только для явно определенных)

Другой синтаксис, чтобы сделать то же самое, может быть:

Base::operator=( rhs );
 BЈовић19 янв. 2011 г., 13:17
на самом деле это лучший способ, чем необходимость кастовать. Кроме того, это должно быть сделано в производных классах

Ваш ответ на вопрос