面向对象编程:CShape类在交互式图形软件中的应用

需积分: 9 2 下载量 201 浏览量 更新于2024-08-19 收藏 386KB PPT 举报
"CShape类是计算机图形学中用于表示形状的基类,它被设计用于交互式图形软件的开发。这个类是从CObject类派生的,提供了颜色、线型和线宽等基本属性,以及绘图和序列化功能。在面向对象的Windows编程中,CShape类可以作为其他形状类的基础,用于构建图形用户界面和图形算法的演示。本文档以Visual C++ 6.0为例,介绍了如何利用MFC库来设计和实现这样的交互式图形软件。" CShape类是面向对象编程中的一个核心组件,特别是在交互式图形软件的设计中。它定义了颜色(COLORREF m_pColor)、线宽(int m_pWidth)和线型(int m_pStyle)等属性,这些都是在绘制形状时不可或缺的基本元素。CShape类还包含两个虚函数:void Drawing(CDC *pDC)和void Serialize(CArchive &ar),分别用于实现图形的绘制和数据的存储与加载。Drawing函数接受一个CDC(设备上下文)指针,这是Windows GDI(图形设备接口)中的一个重要概念,用于在设备上进行绘图操作。Serialize函数则是实现序列化的关键,它使得对象的状态可以在内存和文件之间进行转移。 在交互式图形软件设计中,Visual C++ 6.0是一个常用的开发环境,它包括了文本编辑器、资源编辑器、项目管理器等一系列工具,方便开发者构建Windows应用程序。Visual C++ 6.0的开发工具,如AppWizard、classWizard等,可以帮助快速生成和管理类以及实现特定功能。在项目开发中,工作区(.dsw文件)用来组织相关文件和项目,项目文件(.dsp文件)记录项目的配置信息,而智能感知数据库(.ncb文件)则用于提高IDE的代码补全性能。 MFC(Microsoft Foundation Classes)是微软提供的一个C++库,用于简化Windows API的使用。MFC类库主要分为两部分:基于CObject类的派生类和非CObject类派生的类。CObject类是所有MFC类的基类,提供了基础的特性如动态类型和打印诊断。MFC类库包括多种类,如视图类(CView)、对话框类(CDialog)、文档类(CDocument)和框架窗口类(CFrameWnd),它们构建了MFC应用程序框架,使得开发者可以专注于业务逻辑,而不是底层的Windows API细节。 在Visual C++中,开发一个Windows应用程序通常涉及到选择合适的项目类型,例如MFC应用程序、Win32项目等。每个项目都包含一系列相关文件,如源代码文件、资源文件和图标等。通过类Wizard工具,可以自动生成基于MFC的类,简化编码过程。 总结来说,CShape类是构建图形应用程序的基础,它结合了MFC库的面向对象特性,提供了一种标准化的方式处理形状的绘制和持久化。在Visual C++ 6.0环境下,开发者可以利用MFC的工具和类库,高效地实现交互式图形软件的设计和开发。
2008-11-05 上传
#include<iostream> using namespace std; class CShape{ public:float Area; float Perimeter; CShape() { Area=0;Perimeter=0; } virtual void GetArea(){} virtual void GetPerimeter(){} }; class CRectangle:public CShape{ private: int l;int h; public: CRectangle(int h,int l ):CShape() {this->h=h;this->l=l; } void GetArea() {Area=l*h;cout<<"矩形的面积="<<Area<<endl;} void GetPerimeter() {Perimeter=(l+h)*2;cout<<"矩形的周长="<<Perimeter<<endl; } }; class CCirle:public CShape{ private:float r; public:CCirle(float r):CShape() {this->r=r; } void GetArea() { Area=3.14159*r*r; cout<<"圆的面积="<<Area<<endl; } void GetPerimeter() { Perimeter=r*3.14159*2; cout<<"圆的周长="<<Perimeter<<endl; } }; class CSquare:public CShape{ private: int a; public: CSquare(int a):CShape() { this->a=a; } void GetArea() { Area=a*a; cout<<"正方形面积="<<Area<<endl; } void GetPerimeter() { Perimeter=4*a; } }; class CTrapeziod:public CShape{ private: int lu; int ld; int h; public: CTrapeziod(int lu,int ld,int h):CShape() { this->lu=lu; this->ld=ld; this->h=h; } void GetArea() { Area=(lu+ld)*h/2; cout<<"梯形面积="<<Area<<endl; } }; class CTrangle:public CShape{ private: int d; int h; public: CTrangle(int d,int h):CShape() { this->d=d; this->h=h; } void GetArea() { Area=d*h/2; cout<<"三角形的面积="<<Area<<endl; } }; void main() { CShape *p[5]; CRectangle CR(5,10); CCirle CC(3); CSquare CS(4); CTrapeziod CT1(2,5,4); CTrangle CT2(6,2); p[0]=&CR; p[0]->GetArea(); p[1]=&CC; p[1]->GetArea(); p[2]=&CS; p[2]->GetArea(); p[3]=&CT1; p[3]->GetArea(); p[4]=&CT2; p[4]->GetArea(); int i, double SumArea=0.f; for(i=0;i<5;i++) { SumArea=p[i]->Area+SumArea; } cout<<"面积总和="<<SumArea<<endl; }