Как реализовать использование оператора в иерархии? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть Base класс с несколькими производными классами:

class Base {
private:
    long id;
public:
    Base() {}
    ~Base() {}
    Base &operator = (long temp) {
        id = temp;
        return *this;
    }
};

template <class C>
class Temp1 : public Base {
public:
    Temp1() {}
    ~Temp1() {}
    //do something;
};

template <class C>
class Temp2 : public Base {
public:
    Temp2() {}
    ~ Temp2() {}
    //do something;
};

class Executor1 : public Temp1<int> {
public:
    Executor1() {}
    ~Executor1() {}
};

class Executor2 : public Temp2<char> {
public:
    Executor2() {}
    ~Executor2() {}
};

Я хочу, чтобы эти классы поддерживали operator =.
например:

int main()
{
    long id1 = 0x00001111, id2 = 0x00002222;
    Executor1 exec1;
    Executor2 exec2;

    exec1 = id1;  //exec2.id = id1;
    exec2 = id2;  //exec2.id = id2;
}

Я определяю operator = в Base, объявление которого Base &operator = (long);.

Но ясно, что проблема в том, что = не работает для получения классов. Поэтому я должен определить, что operator = полностью делает то же самое с каждым Executor.

Как лучше разобраться с этим делом в Base?

1 Ответ

0 голосов
/ 12 сентября 2018

Вы должны вставить оператор = в область видимости класса:

class Base
{
public:
    long id;

    Base& operator=(long id)
    {
        this->id = id;
        return *this;
    }
};

class Temp2
    : public Base
{
public:
    using Base::operator=;
};

Необходимо ввести оператор = в область действия, поскольку неявно созданный оператор копирования = Temp2 скрывал оператор= базы.Получил этот намек от @Angew из его комментария.

...