Доступ к полю-члену производного класса из указателя родительского типаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Доступ к полю-члену производного класса из указателя родительского типа

Сообщение Anonymous »

Предположим, у меня есть два класса: A и B:
class A { };

class B : public A
{
private:
int Bvalue{};
}

И у меня есть указатель класса A, который является полем-членом класса C:
class C
{
private:
A* ptr{};
};

Если указатель указывает на объект класса B, как я могу получить доступ к Bvalue без использования Dynamic_cast каждый раз, когда я хочу получить доступ к этот элемент? Динамическое приведение будет медленным, если операция будет выполняться много времени. Есть ли способ преобразовать тип поля-члена ptr?
Я попробовал создать виртуальную функцию, которая возвращала бы значение B в классе A, но очевидно, что класс A не имеет доступа к Bvalue, поэтому оно не работает. Я мог бы заставить ее возвращать 0, а затем поместить функцию в класс B, но это не оптимально. Вот как это будет выглядеть:
class A
{
public:
virtual int getBvalue() { return 0; };
};

class B : public A
{
public:
int getBvalue( return Bvalue; );

private:
int Bvalue{};
}


Подробнее здесь: https://stackoverflow.com/questions/787 ... arent-type
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»