class figure {
public:
virtual void paint() = 0;
};
class rectangle: public figure {
public:
void paint();
};
void rectangle::paint(void) {
printf("paint\r\n");
}
void tmain()
{
rectangle rect;
figure* pfigA = (figure*) ▭
pfigA->paint();
figure& figA = (figure&) rect;
figA.paint();
return 0;
}
вопрос по ООП
возможно ли из родительского класса обращение к методам / переменным потомка? (с++)
Так нельзя, но можно так:
Код:
class A{ Fa() }
class B:A{ Fb() }
//...
A *ap, obj_a ;
B *bp, obj_b ;
class B:A{ Fb() }
//...
A *ap, obj_a ;
B *bp, obj_b ;
Код:
ap=obj_b; //допустимо
ap = obj_a ;
ap->Fa();//допустимо так как Fa() принадлежит A
ap->Fb();//недопустимо так как Fb() непринадлежит A
ap = obj_b ;
ap->Fa();//допустимо так как Fa() принадлежит B (он их наследует от A)
ap->Fb();//допустимо так как Fb() принадлежит B
ap = obj_a ;
ap->Fa();//допустимо так как Fa() принадлежит A
ap->Fb();//недопустимо так как Fb() непринадлежит A
ap = obj_b ;
ap->Fa();//допустимо так как Fa() принадлежит B (он их наследует от A)
ap->Fb();//допустимо так как Fb() принадлежит B
Да. Но уточните что вы имеете ввиду.
Код:
class figure {
};
class rectangle: public figure {
public:
void paint(void);
};
void rectangle::paint(void) {
}
figure figA;
void main(void) {
figA.paint(); // ошибка
}
};
class rectangle: public figure {
public:
void paint(void);
};
void rectangle::paint(void) {
}
figure figA;
void main(void) {
figA.paint(); // ошибка
}
все ясно, спасибо (без указателей нельзя...).