Рассмотрим следующую программу: (Смотрите живую демонстрацию Вот.)
#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
оператор преобразования класса?
Ваш 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
,