Я запутался насчет наследования оператора преобразования

Рассмотрим следующую программу: (Смотрите живую демонстрацию Вот.)

#include <iostream>
class Base
{
int s{9};
public:
operator int()
{
return s;
}
};
class Derived : public Base
{
int s{18};
};
int main()
{
Base b;
int s=b;
std::cout<<s<<'\n';

Derived d;
int m=d;
std::cout<<m;
}

Выход программы:

9

9

Здесь оператор преобразования Base класс наследуется, поэтому инициализация m переменная действительна.

Но теперь я хочу напечатать значение s элемент данных, который принадлежит производным. Как я могу это сделать?

Нужно ли переписывать оператор преобразования для производного класса? Я не могу использовать то же самое Base оператор преобразования класса?

0

Решение

Ваш s параметр Base затенен в Derived, но так как оператор преобразования в в Base учебный класс, Base::s используется внутри него.
Вы можете сделать это:

class Base
{
int s{9};
public:
Base() {}
Base(int v) : s(v) {}
operator int()
{
return s;
}
};
class Derived : public Base
{
public:
Derived() : Base(18)
{
}
};

или напишите свой собственный оператор преобразования в Derived,

3

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector