不是一個乾淨的設計,而只是你想要做的一點暗示。想法是在Base類中保留所有可能的Shapes的所有數據需求,並使用派生類實現取決於Shape類型的行爲。
struct _Point
{
float x, y;
};
class Data
{
protected:
_Point points[8]; //max 8 as required.
};
class Behaviour_1 : public Data
{
public:
void Set(_Point x, _Point y)
{
points[0] = x;
points[1] = y;
}
void Draw()
{
//use points[0] and points[1]
cout << "Drawing Line ----" << endl;
cout << "X coordinates: " << points[0].x << ", " << points[0].y << endl;
cout << "Y coordinates: " << points[1].x << ", " << points[1].y << endl;
}
};
class Behaviour_2 : public Data
{
public:
void Set(_Point x, float radius)
{
points[0] = x;
points[1].x = radius;
}
void Draw()
{
//use points[0] and points[1].x
cout << "Drawing Circle ----" << endl;
cout << "Center coordinates: " << points[0].x << ", " << points[0].y << endl;
cout << "Radius : " << points[0].x << endl;
}
};
int main()
{
// your code goes here
_Point x = {10, 20};
_Point y = {30, 50};
float radius = 60.0f;
Data shape;
Behaviour_1 *Line = (Behaviour_1 *)(&shape);
Line->Set(x, y);
Line->Draw();
Behaviour_2 *Cicle = (Behaviour_2 *)(&shape);
Cicle->Set(x, radius);
Cicle->Draw();
return 0;
}
Output:
Drawing Line ----
X coordinates: 10, 20
Y coordinates: 30, 50
Drawing Circle ----
Center coordinates: 10, 20
Radius : 10
在上述類:
Data
可以是具有Shape
所有任何種Shape
所需的必要的數據。
Behaviour_1
可以是Line
,僅使用points[0] and points[1]
作爲其終點。
Behaviour_2
可以是Circle
,以points[0]
爲中心,points[1].x
爲半徑。
您可以使用placement new來使用預先分配的內存塊。 –
我相信使用「C++自定義內存分配器」選擇的搜索引擎將爲您提供足夠的文獻和示例,以便開始使用 – UnholySheep
您好,請參閱[tour](http://stackoverflow.com/tour)並閱讀[幫助頁面](http://stackoverflow.com/help)。 – 2017-02-24 10:56:31