Наследование и перегрузка

117
09 июня 2019, 07:50

Есть базовый класс

class T {
private:
public:
T() {}
std::string getId() { return id; }
virtual std::string getStr() {}
virtual std::string showBin() {}
virtual T* operator+(T *b) {}
~T() {}
};

И 2 класса которые наследуют базовый класс

сlass SumbString : public T
{
public:
SumbString(std::string init) {
    initId();
    setStr(init);
}
T* operator+(T *b) override {
    return new SumbString(str + b->showBin());
}
std::string getStr() override{
    return str;
}
};

и

class BinString : public T
{
public:
BinString(std::string init) {
    initId();
    if (!checkBin(init)) {
        throw "Error. String not convert to bin";
    }
    setStr(init);
}
T* operator+(T *b) override {
    if (!checkBin(b->getStr())) {
        throw "Error. String not convert to bin";
    }
    std::string newStr = sum(str, b->getStr());
    return new BinString(newStr);
}
std::string showBin() override {
    return str;
}
};

Пытаюсь сделать вот так

T *str = new SumbString(in);
T *bin = new BinString(in);
T* strBin = str + *bin;
T* binSrt = bin + *str;

И у меня ругается на + отсутствует оператор "+", соответствующий этим операнда

Answer 1

Вы в классах определяете оператор для ссылки и указателя. А передаете указатель и ссылку... Вот он и ругается.

Стоит написать

T* strBin = *str + bin;
T* binSrt = *bin + str;

как операторы сразу находятся :)

Но правильнее такие операторы делать не членами классов, а свободными функциями.

READ ALSO
задача с NULL в C++

задача с NULL в C++

помогите разобраться , нужно написать программу решающее уравнение (a+b-c), но нужно сделать так чтобы если какое либо поле было не заполнено...

125
Реализация массива в обратном порядке. (JAVA)

Реализация массива в обратном порядке. (JAVA)

Вчера в задание надо было создать массив который выводил бы данные в обратном порядкеСделал не массив а String str1 = " Football "; // Обьявляем строку...

115
Spring boot test не видит application.properties

Spring boot test не видит application.properties

В классе, для которого пишу тест, есть переменная:

160
Java Как отправить запрос на сервер

Java Как отправить запрос на сервер

Сделал на томкате скрипт что, если с браузера зайти на http://localhost:8080/helloservlet/hello, то мне в вк отправится hello в личные сообщенияКак сделать запрос...

207