C++创建类.docx

上传人:b****4 文档编号:5879118 上传时间:2023-05-09 格式:DOCX 页数:20 大小:19.13KB
下载 相关 举报
C++创建类.docx_第1页
第1页 / 共20页
C++创建类.docx_第2页
第2页 / 共20页
C++创建类.docx_第3页
第3页 / 共20页
C++创建类.docx_第4页
第4页 / 共20页
C++创建类.docx_第5页
第5页 / 共20页
C++创建类.docx_第6页
第6页 / 共20页
C++创建类.docx_第7页
第7页 / 共20页
C++创建类.docx_第8页
第8页 / 共20页
C++创建类.docx_第9页
第9页 / 共20页
C++创建类.docx_第10页
第10页 / 共20页
C++创建类.docx_第11页
第11页 / 共20页
C++创建类.docx_第12页
第12页 / 共20页
C++创建类.docx_第13页
第13页 / 共20页
C++创建类.docx_第14页
第14页 / 共20页
C++创建类.docx_第15页
第15页 / 共20页
C++创建类.docx_第16页
第16页 / 共20页
C++创建类.docx_第17页
第17页 / 共20页
C++创建类.docx_第18页
第18页 / 共20页
C++创建类.docx_第19页
第19页 / 共20页
C++创建类.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C++创建类.docx

《C++创建类.docx》由会员分享,可在线阅读,更多相关《C++创建类.docx(20页珍藏版)》请在冰点文库上搜索。

C++创建类.docx

C++创建类

     C++面向对象编程

(1)如何声明一个类

要声明一个类,使用关键字class ,后跟一个{ 号,然后列出数据成员和该类的方法。

声明结尾用一个}号和一个分号。

classRECTANGLE

{

intleft;

inttop;

intright;

intbottom;

intgetarea();

};

(2)定义一个对象

定义一个新类型的对象和定义一个一般的变量一样。

intwidth;//defineainteger

RECTANGLErt;//defineaRECTANGLE

(3)访问类成员

如果定义了一个实际的类的对象,就可以用点运算符(.)该对象的成员。

RECTANGLErt;

rt.getarea();

(4)私有和公有

一个类的所有成员:

数据和方法,默认时均为私有。

私有的成员只能在类本身的方法内访问;公有成员则可以被类的所有对象访问。

public(公有)、private(私有)。

例1、一个完整的类

#include

classRectangle

{

public:

Rectangle(){_area=0;_left=0;_top=0;_right=0;_bottom=0;}

Rectangle(intleft,inttop,intright,intbottom)

{

_left=left;_top=top;_right=right;_bottom=bottom;_area=0;

}

~Rectangle(){}

voidsetleft(intleft){_left=left;}

voidsetright(intright){_right=right;}

voidsettop(inttop){_top=top;}

voidsetbottom(intbottom){_bottom=bottom;}

voidrect_area(){_area=(_right-_left)*(_bottom-_top);}

intgetleft()const{return_left;};

intgetright()const{return_right;};

intgettop()const{return_top;};

intgetbottom()const{return_bottom;};

intgetarea()const{return_area;};

private:

int_left;

int_top;

int_right;

int_bottom;

int_area;

};

intmain()

{

usingnamespacestd;

Rectanglert;

rt.setleft(100);

rt.settop(30);

rt.setright(200);

rt.setbottom(150);

rt.rect_area();

//rt._left=100;不能直接访问类的私有成员编译错误

//errorC2248:

'_left':

cannotaccessprivatememberdeclaredinclass'Rectangle'

cout<<"Rectangleareais"<

return0;

}

构造函数和析构函数

(1)如何初始化类的成员数据?

类有一个特殊的成员函数,称为构造函数。

构造函数可以根据需要带有参数,但它不能有返回值——甚至连返回空值都不行。

构造函数是一个与类同名的类方法。

在声明构造函数的同时,还需要声明一个析构函数。

构造函数创建并初始化类的对象;析构函数在对象被撤消后清除并释放所分配的内存。

析构函数必须与类同名,其前面有一个波浪号“~”。

析构函数没有参数,没有返回值。

默认构造函数和析构函数

如果在声明类时没有同时声明构造函数和析构函数,编译器会自动创建一个(即默认的)。

默认的构造函数和析构函数没有参数,也不能进行任何操作。

使用构造函数和析构函数

所有类对象都必须被构造和析构,在适当的时候将调用这些不进行任何操作的函数。

Rectanglert;//不带参数

Rectanglerect(100,100,200,150);//带有4个参数

(2)成员函数const

将一个类的方法声明为const,必须保证该方法不会改变该类的任何一个成员变量的值。

把类方法声明为常量,需要在函数声明的括号之后分号之前放置关键字const。

(3)用其他类作为成员数据的类

例2、声明一个类然后把它用作另一个类的成员数据

 

#include

constfloat_size_r=30.f;

usingnamespacestd;

classVertex

{

public:

Vertex(){}

Vertex(floatx,floaty,floatz){_vx=x;_vy=y;_vz=z;}

voidsetX(floatvx){_vx=vx;}

voidsetY(floatvy){_vy=vy;}

voidsetZ(floatvz){_vz=vz;}

floatgetX()const{return_vx;}

floatgetY()const{return_vy;}

floatgetZ()const{return_vz;}

private:

float_vx;

float_vy;

float_vz;

};

classRectangular

{

public:

Rectangular(){}

Rectangular(float_vertex[8][3]);

~Rectangular(){}

voidSetVertex_1(Vertexvertex);

voidSetVertex_2(Vertexvertex);

voidSetVertex_3(Vertexvertex);

voidSetVertex_4(Vertexvertex);

voidSetVertex_5(Vertexvertex);

voidSetVertex_6(Vertexvertex);

voidSetVertex_7(Vertexvertex);

voidSetVertex_8(Vertexvertex);

VertexGetVertex_1()const;

VertexGetVertex_2()const;

VertexGetVertex_3()const;

VertexGetVertex_4()const;

VertexGetVertex_5()const;

VertexGetVertex_6()const;

VertexGetVertex_7()const;

VertexGetVertex_8()const;

private:

VertexVertex_1;

VertexVertex_2;

VertexVertex_3;

VertexVertex_4;

VertexVertex_5;

VertexVertex_6;

VertexVertex_7;

VertexVertex_8;

};

VertexGetVertexData(floatx,floaty,floatz)

{

Vertext;

t.setX(x);

t.setY(y);

t.setZ(z);

returnt;

}

Rectangular:

:

Rectangular(float_vertex[8][3])

{

Vertex_1=GetVertexData(_vertex[0][0],_vertex[0][1],_vertex[0][2]);

Vertex_2=GetVertexData(_vertex[1][0],_vertex[1][1],_vertex[1][2]);

Vertex_3=GetVertexData(_vertex[2][0],_vertex[2][1],_vertex[2][2]);

Vertex_4=GetVertexData(_vertex[3][0],_vertex[3][1],_vertex[3][2]);

Vertex_5=GetVertexData(_vertex[4][0],_vertex[4][1],_vertex[4][2]);

Vertex_6=GetVertexData(_vertex[5][0],_vertex[5][1],_vertex[5][2]);

Vertex_7=GetVertexData(_vertex[6][0],_vertex[6][1],_vertex[6][2]);

Vertex_8=GetVertexData(_vertex[7][0],_vertex[7][1],_vertex[7][2]);

}

voidRectangular:

:

SetVertex_1(Vertexvertex){Vertex_1=vertex;}

voidRectangular:

:

SetVertex_2(Vertexvertex){Vertex_2=vertex;}

voidRectangular:

:

SetVertex_3(Vertexvertex){Vertex_3=vertex;}

voidRectangular:

:

SetVertex_4(Vertexvertex){Vertex_4=vertex;}

voidRectangular:

:

SetVertex_5(Vertexvertex){Vertex_5=vertex;}

voidRectangular:

:

SetVertex_6(Vertexvertex){Vertex_6=vertex;}

voidRectangular:

:

SetVertex_7(Vertexvertex){Vertex_7=vertex;}

voidRectangular:

:

SetVertex_8(Vertexvertex){Vertex_8=vertex;}

VertexRectangular:

:

GetVertex_1()const{returnVertex_1;}

VertexRectangular:

:

GetVertex_2()const{returnVertex_2;}

VertexRectangular:

:

GetVertex_3()const{returnVertex_3;}

VertexRectangular:

:

GetVertex_4()const{returnVertex_4;}

VertexRectangular:

:

GetVertex_5()const{returnVertex_5;}

VertexRectangular:

:

GetVertex_6()const{returnVertex_6;}

VertexRectangular:

:

GetVertex_7()const{returnVertex_7;}

VertexRectangular:

:

GetVertex_8()const{returnVertex_8;}

voidoutVertexData(Vertext)

{

cout<<"x="<

cout<<"y="<

cout<<"z="<

}

intmain()

{

floatv[8][3]={

{-_size_r,-_size_r,-_size_r},{-_size_r,_size_r,-_size_r},

{_size_r,_size_r,-_size_r},{_size_r,-_size_r,-_size_r},

{_size_r,-_size_r,_size_r},{_size_r,_size_r,_size_r},

{-_size_r,_size_r,_size_r},{-_size_r,-_size_r,_size_r}};

Rectangularrect(v);

cout<<"3DRectangularVertexData"<

cout<<"Vertex_1";

outVertexData(rect.GetVertex_1());

cout<<"Vertex_2";

outVertexData(rect.GetVertex_2());

cout<<"Vertex_3";

outVertexData(rect.GetVertex_3());

cout<<"Vertex_4";

outVertexData(rect.GetVertex_4());

cout<<"Vertex_5";

outVertexData(rect.GetVertex_5());

cout<<"Vertex_6";

outVertexData(rect.GetVertex_6());

cout<<"Vertex_7";

outVertexData(rect.GetVertex_7());

cout<<"Vertex_8";

outVertexData(rect.GetVertex_8());

Rectangularrt;

Vertexvt;

vt.setX(50);

vt.setY(0);

vt.setZ(50);

rt.SetVertex_1(vt);

cout<<"(rt)Vertex_1";

outVertexData(rt.GetVertex_1());

cout<<"(rect)Vertex_1";

outVertexData(rect.GetVertex_1());

Vertexvtm(100,-100,100);

rt.SetVertex_2(vtm);

cout<<"(rtm)Vertex_2";

outVertexData(rt.GetVertex_2());

cout<<"(rect)Vertex_2";

outVertexData(rect.GetVertex_2());

return0;

}

 

             图1、程序输出结果

下面建立一个实用的类(用于屏幕绘图)

 

#include

#include

typedefHBRUSHBrush;

typedefHPENPen;

typedefCOLORREFColor;

typedefHFONTFont;

typedefvoidGRAPHV;

Fontg_font=CreateFont(-16,0,0,0,400,0,0,0,GB2312_CHARSET,0,0,0,FF_MODERN,"宋体");

classGRAPHGDI

{

public:

GRAPHGDI(){}

GRAPHGDI(HDChdc){g_hdc=hdc;}

~GRAPHGDI(){}

GRAPHVsethdc(HDChdc)

{

g_hdc=hdc;

}

GRAPHVcolor(intr,intg,intb)

{

if(r>255)r=255;if(r<0)r=0;

if(g>255)g=255;if(g<0)g=0;

if(b>255)b=255;if(b<0)b=0;

g_color=RGB(r,g,b);

}

GRAPHVmakebrush()

{

g_brush=CreateSolidBrush(g_color);

SelectObject(g_hdc,g_brush);

}

GRAPHVfreebrush()

{

DeleteObject(g_brush);

}

GRAPHVmakepen()

{

g_pen=CreatePen(PS_SOLID,1,g_color);

SelectObject(g_hdc,g_pen);

}

GRAPHVfreepen()

{

DeleteObject(g_pen);

}

GRAPHVline(intx1,inty1,intx2,inty2)

{

POINTp[2];

p[0].x=x1;p[0].y=y1;

p[1].x=x2;p[1].y=y2;

makepen();

Polyline(g_hdc,p,2);

freepen();

}

GRAPHVrectangle(intx,inty,intw,inth)

{

POINTp[5];

p[0].x=x;p[0].y=y;

p[1].x=x+w;p[1].y=y;

p[2].x=x+w;p[2].y=y+h;

p[3].x=x;p[3].y=y+h;

p[4].x=x;p[4].y=y;

makepen();

Polyline(g_hdc,p,5);

freepen();

}

GRAPHVfillrectangle(intx,inty,intw,inth)

{

makebrush();

makepen();

Rectangle(g_hdc,x,y,x+w,y+h);

freebrush();

freepen();

}

GRAPHVcircle(intx,inty,intr)

{

makepen();

Arc(g_hdc,x-r,y-r,x+r,y+r,x+r,y,x+r,y);

freepen();

}

GRAPHVfillcircle(intx,inty,intr)

{

makebrush();

makepen();

Chord(g_hdc,x-r,y-r,x+r,y+r,x+r,y,x+r,y);

freebrush();

freepen();

}

GRAPHVarc(intx1,inty1,intx2,inty2,intx3,inty3,intx4,inty4)

{

makepen();

Arc(g_hdc,x1,y1,x2,y2,x3,y3,x4,y4);

freepen();

}

GRAPHVellipse(intx,inty,intxr,intyr)

{

makepen();

Arc(g_hdc,x-xr,y-yr,x+xr,y+yr,x+xr,y,x+xr,y);

freepen();

}

GRAPHVfillellipse(intx,inty,intxr,intyr)

{

makebrush();

makepen();

Ellipse(g_hdc,x-xr,y-yr,x+xr,y+yr);

freebrush();

freepen();

}

GRAPHVputpixel(intx,inty,Colorcr)

{

SetPixelV(g_hdc,x,y,cr);

}

GRAPHVbezierline(intpx[4],intpy[4])

{

POINTp[4];

for(inti=0;i<4;i++)

{

p[i].x=px[i];

p[i].y=py[i];

}

makepen();

PolyBezier(g_hdc,p,4);

freepen();

}

GRAPHVroundrect(intx1,inty1,intx2,inty2,intx3,inty3)

{

makebrush();

makepen();

RoundRect(g_hdc,x1,y1,x2,y2,x3,y3);

freebrush();

freepen();

}

GRAPHVclear(intx,inty,intw,inth,intr,intg,intb)

{

Brushbr=CreateSolidBrush(RGB(r,g,b));

Penp=CreatePen(PS_SOLID,1,RGB(r,g,b));

SelectObject(g_hdc,br);

SelectObject(g_hdc,p);

Rectangle(g_hdc,x,y,w,h);

DeleteObject(br);

DeleteObject(p);

}

GRAPHVfont(intsize_f,char*style)

{

g_font=CreateFont(-size_f,0,0,0,400,0,0,0,

GB2312_CHARSET,0,0,0,FF_MODERN,style);

}

GRAPHVdrawtext(intx,inty,char*text)

{

SelectObject(g_hdc,g_font);

SetTextColor(g_hdc,g_color);

SetBkMode(g_hdc,TRANSPARENT);

TextOut(g_hdc,x,y,text,strlen(text));

DeleteObject(g_font);

}

private:

HDCg_hdc;

Colorg_color;

Brushg_brush;

Peng_pen;

};

把它保存为“graphics.h”文件

举例运用:

(VC6环境)

 

#include"e:

\学习编程C++\graphics.h"

//全局变量

//窗口句柄

HWNDhwnd;

HDChdc;

HDCcdc;

HBITMAPhbmp;

//窗口类名

char*InitWinClassName="win32class";

//窗口标题名称

char*InitWinName="框架程序";

intWidth=500;

intHeight=500;

//窗口信息处理回调

LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);

//初始化窗口

voidInitWindow(HINSTANCE,int,int,int);

//信息循环

voidMessageLoop(voidRe

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 化学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2