использование методов разных классов из базового
Цитата:
enum color { white=1, black=2, green=3, red=4, yellow=5, blue=6, violet=7, gray=8, turquoise=9};
class draw
{
public:
static draw *head;
static draw *current;
static draw *end;
static color defRGB;
color RGB;
bool pouring;
void switchcolor(color RGB);
void glout();
draw();
~draw();
protected:
draw *next;
draw *prev;
};
class cdCircle2D : public draw
{
public:
// окружность
GLfloat x;
GLfloat y;
GLfloat radius;
cdCircle2D();
~cdCircle2D();
void todraw();
void cadd();
};
class cdEllipse2D : public draw
{
public:
// эллипс
GLfloat x;
GLfloat y;
GLfloat radius;
GLfloat a;
GLfloat b;
cdEllipse2D();
~cdEllipse2D();
void todraw();
void eadd();
};
class cdTriangle2D : public draw
{
public:
// треугольник
GLfloat x1;
GLfloat y1;
GLfloat x2;
GLfloat y2;
GLfloat x3;
GLfloat y3;
cdTriangle2D();
~cdTriangle2D();
void todraw();
void tadd();
};
class draw
{
public:
static draw *head;
static draw *current;
static draw *end;
static color defRGB;
color RGB;
bool pouring;
void switchcolor(color RGB);
void glout();
draw();
~draw();
protected:
draw *next;
draw *prev;
};
class cdCircle2D : public draw
{
public:
// окружность
GLfloat x;
GLfloat y;
GLfloat radius;
cdCircle2D();
~cdCircle2D();
void todraw();
void cadd();
};
class cdEllipse2D : public draw
{
public:
// эллипс
GLfloat x;
GLfloat y;
GLfloat radius;
GLfloat a;
GLfloat b;
cdEllipse2D();
~cdEllipse2D();
void todraw();
void eadd();
};
class cdTriangle2D : public draw
{
public:
// треугольник
GLfloat x1;
GLfloat y1;
GLfloat x2;
GLfloat y2;
GLfloat x3;
GLfloat y3;
cdTriangle2D();
~cdTriangle2D();
void todraw();
void tadd();
};
как можно в данном случае из базового класса draw вызывать функции todraw() в зависимости от классов потомков? знаю что нужно использовать виртуальные функции, но не помню, хоть убей:rolleyes:
буду строить из данных классов "разношёрстный" список. и ещё, можно ли както задать эквивалент white=1 чтобы во время вызова функции void switchcolor(color RGB); в качестве передаваемого параметра можно было указывать как 1 так и white? спасибо за внимание.
Код:
virtual void todraw() = 0;
В классах потомках надо описать такую же функцию со словом "virtual". После этого создаешь указатели на базовый класс и присваиваешь им обьекты - потомки. После этого при вызове функции таким образом:
Код:
draw* p_draw;
cdCircle2D Circle2D;
p_draw = &Circle2D;// сдесь присваиваешь указатель на обьект класса-потомка, напиример cdCircle2D.
p_draw->todraw();
cdCircle2D Circle2D;
p_draw = &Circle2D;// сдесь присваиваешь указатель на обьект класса-потомка, напиример cdCircle2D.
p_draw->todraw();
будет вызываться соответствующая функция класса-потомка.
Вверху у тебя уже определена переменная color типа enum, поэтому можешь в функцию "switchcolor" передавать соответствующие названия цветов.