谁帮我做下这几道编程题 用C++ 感激不尽!
2.1设计一个基本图形属性类,要求:类名:CDrawAttr;具备:色彩(DWORD)、笔宽(float)和属性位(WORD);笔宽的设置和取值函数;若属性位的最高位表示...
2.1 设计一个基本图形属性类,要求:
类名:CDrawAttr;
具备:色彩(DWORD)、笔宽(float)和属性位(WORD);
笔宽的设置和取值函数;
若属性位的最高位表示该对象处于删除状态,那么设置和去除这个状态应如何表示(提示:0X8000, 0X7FFF);
包含一个输出的纯虚函数void Draw(CDC* pDC)。
2.2 从CDrawAttr继承,设计一个直线和一个矩形类,要求:
设计各自的你认为必要的,基本的数据成员和成员函数;
实现各自的输出函数(Draw)(可用伪代码实现)。
设计一段程序,生成上题所定义的直线和矩形图形对象,并通过一个for循环表示C++的多态特性。
请把代码粘上,好的一定给分!谢谢! 展开
类名:CDrawAttr;
具备:色彩(DWORD)、笔宽(float)和属性位(WORD);
笔宽的设置和取值函数;
若属性位的最高位表示该对象处于删除状态,那么设置和去除这个状态应如何表示(提示:0X8000, 0X7FFF);
包含一个输出的纯虚函数void Draw(CDC* pDC)。
2.2 从CDrawAttr继承,设计一个直线和一个矩形类,要求:
设计各自的你认为必要的,基本的数据成员和成员函数;
实现各自的输出函数(Draw)(可用伪代码实现)。
设计一段程序,生成上题所定义的直线和矩形图形对象,并通过一个for循环表示C++的多态特性。
请把代码粘上,好的一定给分!谢谢! 展开
2个回答
展开全部
class CDrawAttr
{
protected:
DWORD m_color;
float m_penWidth;
WORD m_wFlag;
public:
void Remove() { m_wFlag |= 0x8000; } // 设置最高位
void Restore() { m_wFlag &= 0x7FFF; }; // 清除最高位
virtual void Draw(CDC* pDC) = 0;
virtual ~CDrawAttr() { }
}
class CLine : public CDrawAttr
{
POINT m_pt1, m_pt2;
public:
CLine(POINT p1, POINT p2, DWORD dwColor, float nPenWidth)
{
m_pt1 = p1;
m_pt2 = p2;
m_color = dwColor;
m_penWidth = nPenWidth;
}
virtual void Draw(CDC* pDC)
{
pDC->DrawLine(m_pt1, m_pt2, m_color, m_penWidth ); // 伪代码
}
}
class CRectangle : public CDrawAttr
{
POINT m_ptLeftTop, m_ptRightDown;
public:
CLine(POINT p1, POINT p2, DWORD dwColor, float nPenWidth)
{
m_ptLeftTop = p1;
m_ptRightDown = p2;
m_color = dwColor;
m_penWidth = nPenWidth;
}
virtual void Draw(CDC* pDC)
{
pDC->DrawRect(m_ptLeftTop , m_ptRightDown , m_color, m_penWidth ); // 伪代码
}
}
void main()
{
CLine line(...);
CRectangle rect(...);
CDrawAttr* pDrawObject[] = { &line, &rect };
for(int i = 0; i < countof(pDrawObject); i++)
{
pDrawObject[i]->Draw();
}
}
{
protected:
DWORD m_color;
float m_penWidth;
WORD m_wFlag;
public:
void Remove() { m_wFlag |= 0x8000; } // 设置最高位
void Restore() { m_wFlag &= 0x7FFF; }; // 清除最高位
virtual void Draw(CDC* pDC) = 0;
virtual ~CDrawAttr() { }
}
class CLine : public CDrawAttr
{
POINT m_pt1, m_pt2;
public:
CLine(POINT p1, POINT p2, DWORD dwColor, float nPenWidth)
{
m_pt1 = p1;
m_pt2 = p2;
m_color = dwColor;
m_penWidth = nPenWidth;
}
virtual void Draw(CDC* pDC)
{
pDC->DrawLine(m_pt1, m_pt2, m_color, m_penWidth ); // 伪代码
}
}
class CRectangle : public CDrawAttr
{
POINT m_ptLeftTop, m_ptRightDown;
public:
CLine(POINT p1, POINT p2, DWORD dwColor, float nPenWidth)
{
m_ptLeftTop = p1;
m_ptRightDown = p2;
m_color = dwColor;
m_penWidth = nPenWidth;
}
virtual void Draw(CDC* pDC)
{
pDC->DrawRect(m_ptLeftTop , m_ptRightDown , m_color, m_penWidth ); // 伪代码
}
}
void main()
{
CLine line(...);
CRectangle rect(...);
CDrawAttr* pDrawObject[] = { &line, &rect };
for(int i = 0; i < countof(pDrawObject); i++)
{
pDrawObject[i]->Draw();
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |