@dima20155
you don't choose c++. It chooses you

Возможно ли определить get функцию в базовом классе и использовать в классе наследника?

struct A {
    const std::string& getName() const {return name;}
    std::string name {"A class"};
};

struct B : public A {
    std::string name {"B class"};
};

int main() {
    A a;
    B b;
    std::cout << a.getName() << std::endl;
    std::cout << b.getName() << std::endl;
    return 0;
}


stdout:
A class
A class

А хотел бы получить:
stdout:
A class
B class

Как получить такое поведение?
Также интересно хорошая ли эта практика или это кривая архитектура?
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
@dima20155 Автор вопроса
you don't choose c++. It chooses you
Я понял, что можно не заводить лишнюю переменную в B и использовать делегирующий конструктор.
Думаю, это подходящее решение.
struct A {
    A(const std::string& name = "A class") : name(name) {}
    const std::string& getName() const {return name;}
    std::string name {"A class"};
};

struct B : public A {
    B(const std::string& name = "B class"s) : A(name) {}
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы