Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

использование методов разных классов из базового

27K
15 октября 2008 года
amisd
9 / / 05.09.2007
собсно классы
Цитата:
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();
};


как можно в данном случае из базового класса draw вызывать функции todraw() в зависимости от классов потомков? знаю что нужно использовать виртуальные функции, но не помню, хоть убей:rolleyes:
буду строить из данных классов "разношёрстный" список. и ещё, можно ли както задать эквивалент white=1 чтобы во время вызова функции void switchcolor(color RGB); в качестве передаваемого параметра можно было указывать как 1 так и white? спасибо за внимание.

5.3K
15 октября 2008 года
!Волк
95 / / 19.07.2006
В базовом классе обьявляешь функцию todraw с волшебным словом "virtual". В случае, если функция будет без описания тела, добавляешь после функции "=0":
 
Код:
virtual void todraw() = 0;

В классах потомках надо описать такую же функцию со словом "virtual". После этого создаешь указатели на базовый класс и присваиваешь им обьекты - потомки. После этого при вызове функции таким образом:
 
Код:
draw* p_draw;
cdCircle2D Circle2D;
p_draw = &Circle2D;// сдесь присваиваешь указатель на обьект класса-потомка, напиример cdCircle2D.
p_draw->todraw();

будет вызываться соответствующая функция класса-потомка.

Вверху у тебя уже определена переменная color типа enum, поэтому можешь в функцию "switchcolor" передавать соответствующие названия цветов.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог