Как использовать указатель базового класса ссылаться на член производного класса? - PullRequest
0 голосов
/ 01 ноября 2018
class a{};
class b : public class a{
public:
int c;
};
a* var = new b;
var->c=2;  

Последняя строка неверна. Можно ли ссылаться на производный член класса?

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

в то время как var является объектом b во время компиляции, компилятор не знает об этом, поэтому вы должны привести его к объекту b или указателю, как это.

(*(b*)var).c = 2;
((b*)var)->c = 2;

Мой учитель информатики объяснил, что лечит два случая при выполнении полиморфизма во время выполнения и во время компиляции

Надеюсь, это поможет.

0 голосов
/ 01 ноября 2018

Вы можете использовать static_cast для перехода с базового уровня на производное, а затем для доступа к члену.

static_cast<b*>(var)->c = 2;

0 голосов
/ 01 ноября 2018

Если член не входит в базовый класс, вам не следует разрешать доступ к нему, и это должно привести к ошибке компиляции. Чтобы получить доступ к члену производного класса, вы можете типизировать его к производному классу.

class a{};
class b : public class a{
public:
    int c;
};
a* var = new b;
((b*)var)->c=2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...