Наследованный класс как поле класса
Есть код:
class A
{
public:
int c;
};
class B : public A
{};
int main()
{
B a;
a.c = 10;
cout << a.A::c;
}
Насколько я понял, это что-то вроде восходящего преобразования. Правильное ли у меня понимание данного синтаксиса и есть ли еще какие-то способы апкастинга и даункастинга без ссылок и указателей в плюсах?
Ответы (1 шт):
Класс B наследован от A и получает все от него в "наследство". Обычно, обращение таким данным "очевидно" для компилятора и он может "догадаться". Но иногда бывает не так. Посмотрите на такое
class A
{
public:
int c;
};
class B : public A
{
public:
int c;
};
В этом случае компилятор ругаться не будет, но что делать, если с функций класса B нужно обратится к переменной c класса A? Есть два способа - либо сделать функцию-прослойку (но ее нужно будет делать в классе A!, а это не всегда возможно), либо явно подсказать компилятору, что Вы хотите обратится к переменной класса A, используя такой синтаксис
B x;
x.c = 1; // это с класса B
x.A::c = 2; // а это с класса А
Насколько я понял, это что-то вроде восходящего преобразования.
нет, это просто уточнение для компилятора, что бы он точно понимал Ваши намерения.
апкастинга и даункастинга
это не имеет никакого отношения к преобразованию и приведению.