Вы можете просто ограничить вызов дочернего элемента Draw для вызова Graphic :: Draw (тип, тип) явно ..Например:
class Graphic {
...
virtual void Draw(type argX, type argY)
{
// drawing code
}
...
}
class Item : public Graphic {
...
type mX;
type mY;
...
virtual void Draw() { Graphic::Draw( this->mX, this->mY ); }
...
};
Но следите за Item :: Draw (void) shadowing (hiding) Item :: Draw (тип, тип) .Вы не увидите обеих перегрузок в дочернем классе (например, Item objects).Вы должны будете использовать явную область видимости ... (Как ItemObject-> Graphic :: Draw (x, y) .) Или, возможно, "using" clause ...
Кроме того, вы сталкиваетесь со сложностями кодирования в отношении полиморфизма ... Приятно ссылаться на набор графических объектов с помощью одного виртуального Draw () метод.Например: пункт I;Графика * g = & i;g-> draw (foo, bar);
Я хотел бы предложить что-то вроде:
class Graphic {
...
virtual void Draw(type argX = LOADDATA, type argY = LOADDATA)
{
if ( argX == LOADDATA ) argX = getArgX();
if ( argY == LOADDATA ) argY = getArgY();
// drawing code
}
virtual type getArgX() { return DEFAULT_ARGX; }
virtual type getArgY() { return DEFAULT_ARGY; }
...
}
class Item : public Graphic {
...
type mX;
type mY;
...
virtual type getArgX() { return mX; }
virtual type getArgY() { return mY; }
...
};
Конечно, вам лучше перенести введите mX и введите mY в базовый класс, чтобы начать с ... Предположительно, большинство Графика объекты будут иметь местоположение x, y ...