成员函数,函数成员与成员函数的区别
各位老铁们好,相信很多人对成员函数都不是特别的了解,因此呢,今天就来为大家分享下关于成员函数以及函数成员与成员函数的区别的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
函数成员与成员函数的区别
区别很大:
1.成员函数是面向对象的概念,所谓的成员函数,是指一个函数作为类的成员,公有成员、私有成员或者保护成员。
2.普通函数一般有两种传递方式,按类型传递和按值传递,也就是传指针和传返回值两种情况。成员函数一般是按类型传递,也即是传指针地址
3.普通函数可以随便调用,并且无法继承和封装,成员函数根据类的不同,可以进行继承,根据公有私有的不同,调用方式也不同
4.深层次的区别,普通函数作为C语言的概念,用的是stdlib,成员函数是用iostream,编译方法不同,至于谁占内存多,并不好说,也不是说面向对象的就占内存大些,还是看具体的环境和编译器。
5.嵌入式的编程,用普通函数较多,成员函数较少,当然ARM嵌入linux那种例外
大体上能一下子想到的只有这么多了
函数是否分配内存,看变量,这个问题,我得详细解释一下,你是否熟悉汇编?知道不知道函数字段这个概念,也就说,所有函数都是分配在一段共享字段里面的,也就是你所说的内存,其实不仅仅是内存,包括闪存等等都可以包含,所以是占用了一段空间的,只是这段空间不一定在内存内,可能在闪存内,也可能在硬盘内,这么说,你清楚吗?
请问什么是成员函数的定义
成员函数相当于C或C++中的函数。你应该用如下的方式说明一个成员函数:
Type name(Parameter)
//function body
注意:每一个成员函数必须返回一个值或声明返回为空(void)。它返回类型的说明告诉编译器它将返回什么类型的值。在某些情况下,成员函数需要表示它是否成功的完成了它的工作,此时返回类型通常为布尔型的。参数表是用逗号分开的一组变量,它将为成员函数提供所需信息。
下面例子中定义了一个成员函数。通过它,你的矩形类可以计算自己的面积了:
int getArea(int w,int h)
{
int a;
a=w*h;
return a;
}
另外,矩形还需要对自己进行描绘,因此它需要成员函数drawRect(),此时,你的矩形类的定义将如下所示:
public class DrwRect
{
public static void main(String args[])
{
class Rectangle
{
int width,height,area;
public Rectangle(int w,int h)
{
width=w;
height=h;
area=getArea(w,h);
}
protected int getArea(int w,int h)
{
int a;
a=w*h;
return a;
}
public void drawRect()
{
int i,j;
for(i=width;i>0;i--)
System.out.print("#");
System.out.print("");
for(i=height-2;i>0;i--)
System.out.print("#");
for(j=width-2;i>0;j--)
System.out.print("");
System.out.print("#");
for(i=width;i>0;i--)
System.out.print("#");
System.out.print("");
}
}//Rectangle
int w=Integer.valueOf(args[0]).intValue();
int h=Integer.valueOf(args[1]).intValue();
Rectangle myrect=new Rectangle(w,h);
myrect.drawRect();
}
}
上例中最后一个“#”号后面还有一个System.out.print("")这是由于这个成员函数在上一行没有结束而且缓冲区没有溢出时将不把输出结果写屏。若你使用print成员函数,却没有得到输出,这时仔细确认一下你是否以""来结束你的输出流。
2:不同类型的成员函数
在上例的成员函数声明中你需要注意两点:getArea()定义为private型,drawRect()定义为public型。public型意味着任何类都可以调用它。private型,它只能被所声明的类内部调用。这些说明类型同样适用于数据变量。
若有人想改变一个私有变量,通常要引用下面的成员函数:
public void setWidth(int w)
{
width=w;
}
注意:在Java中,protected只是作为关键字出现,而没有相应的功能。
3:成员函数的重载
假如你必须在不同情况下发送不同的信息给同一个成员函数的话,该怎么办呢?你可以通过对此成员函数说明多个版本(version)的方法来实现重载。重载的本质是创建了一个新的成员函数:你只需给它一个不同的参数列表(parameterlist),如下例所示:
void get Area(int w,int h);
void get Area(float w,float h);
在第二种情况下,成员函数get Area()接受两个浮点变量作为它的参数,编译器根据调用时的不同参数来决定该调用哪一种成员函数,假如你把两个整数提供给成员函数,你就调用第一个成员函数;假如你把两个浮点数提供给成员函数,第二个成员函数就被调用。
4:静态成员
除了public、private和protected以外,你还可以把成员说明为static(静态)。static修饰符表明一个变量或成员函数对所有类的实例都是相同的,你也许想使用一个所有Rectangle类都可以使用的变量,来说明该类的版本(version),假如你把它说明成一个static,那么该变量将对该类的所有实例都是一样的,如:
static int version=1;
静态成员函数和静态变量的优点就在于他们能在没有创建类的任何一个实例的情况下被引用,引用时在“.”域前,可直接使用类名而无须使用对象名。例如,drawRect成员函数使用了System.out.println成员函数,但实际上你却未曾创建一个某个System类的对象,这正是因为out是System类的一个静态变量,所以你可以直接使用这个成员函数而无须定义一个System对象。
5:构造和析构成员函数
类有一个特殊的成员函数叫做构造成员函数,它通常用于初始化类的数据成员。在创建对象时,会自动调用类的构造成员函数。Java中的构造成员函数必须与该类具有相同的名字,另外,构造成员函数一般都应用public类型来说明,这样才能在程序任意的位置创建类的实例--对象。
下面是一个Rectangle类的构造成员函数,它带有两个参数,分别表示矩形的长和宽:
public Rectangle(int w,int h)
{
width=w;
height=h;
area=getArea(w,h);
}
除了构造成员函数以外,类还提供了析构成员函数,当对象被从内存中删除时,该成员函数将会被自动调用。通常,在析构成员函数内,你可以填写用来回收对象内部的动态空间的代码。
什么是成员函数
成员函数 CDC类中,常用的一些成员函数。
CDC
CObject
└CDC
CDC类定义的是设备上下文对象的类。
CDC对象提供处理显示器或打印机等设备上下文的成员函数,以及处理与窗口客户区对应的显示上下文的成员。
通过CDC对象的成员函数进行所有的绘图。
类对设备上下文操作提供了成员函数,处理绘图工具。安全型图形设备接口(GDI)对象收集,以及处理颜色和调色板。
它还为获取和设置绘图属性、映射,处理视点、窗口扩展、转换坐标,处理区域、剪贴、绘制直线及绘制简单椭圆和多边形等形状提供了成员函数。
另外还为绘制文本、处理字体,使用打印机跳转,滚动和播放元文件提供成员函数。
使用CDC对象时要构造它,然后调用与它平等的、使用设备上下文的Windows函数的成员函数。
注意:
Windows 95下所有屏幕坐标限制在16位以内。因此向CDC成员函数传递的int必须在-32768至32767之间。
为了特定用途,Microsoft基本类库提供了几个CDC派生类。 CPaintDC包括BeginPaint和EndPaint调用。
CClientDC管理窗口用户区对应的显示上下文。
CWindowDC管理与整个窗口对应的显示上下文,包括它的结构和控件。
CMetaFileDC与带元文件的设备上下文对应。
CDC包含m_hDC和m_hAttribDC两个设备上下文,它们在CDC对象创建时参考同一个设备。
CDC指导所有对m_hDC的输出GDI调用以及对m_hAttribDC的大部分属性GDI调用(GetTextColor是属性调用的例子,而SetTextColor是一个输出调用)。
例如框架使用这两个设备上下文实现CMetaFileDC对象,在从物理设备读取属性期间向元文件发送输出。
打印预览以相同风格在框架中实现。还可以以相似方法在特殊应用代码中使用这两个设备上下文。
可能多次需要来自m_hDC和m_hAttribDC设备上下文的文本度量信息。
以下几对函数提供了这项功能:
使用m_hAttribDC使用m_hDC
GetTextExtent GetOutputTextExtent
GetTabbedTextExtent GetOutputTabbedTextExtent
GetTextMetrics GetOutputTextMetrics
GetCharWidth GetOutputCharWidth
有关CDC的更多信息,请参阅联机文档“Visual C++程序员指南”中的“设备上下文”。
#include<afxwin.h>
请参阅:CPaintDC, CClientDC, CWindowDC, CMetaFileDC
CDC类成员
数据成员 m_hDC CDC对象使用的输出设备上下文
m_hAttribDC CDC对象使用的输出属性上下文
构造函数 CDC构造一个CDC对象
初始化 CreateDC为指定设备创建设备上下文
CreateIC为指定设备创建信息上下文。这提供了一种不创建设备上下文即获取有关设备信息的快速方式
CreateCompatibleDC创建内存设备上下文,与另一个设备上下文匹配。可以用它在内存中准备图像
DeleteDC删除CDC对象对应的Windows设备上下文
FromHandle给定设备上下文句柄时,返回指向CDC对象的指针。如果CDC对象未附加到句柄,则创建并附加一个临时CDC对象
DeleteTempMap由CWinApp空闲时间句柄调用,删除FromHandle创建的临时CDC对象。同时分离设备上下文
Attach把Windows设备上下文附加到这个CDC对象
Detach从CDC对象分离Windows设备上下文.
SetAttribDC设置属性设备上下文m_hAttribDC
SetOutputDC设置输出设备上下文m_hDC
ReleaseAttribDC释放属性设备上下文m_hAttribDC
ReleaseOutputDC释放输出设备上下文m_hDC
GetCurrentBitmap返回指向当前选择的CBitmap对象的指针
GetCurrentBrush返回指向当前选择的CBrush对象的指针
GetCurrentFont返回指向当前选择的CFont对象的指针
GetCurrentPalette返回指向当前选择的CPalette对象的指针
GetCurrentPen返回指向当前选择的CPen对象的指针
GetWindow返回显示设备上下文对应的窗口
设备上下文函数 GetSafeHdc返回输出设备上下文m_hDC
SaveDC保存设备上下文当前状态
RestoreDC恢复SaveDC保存的设备上下文以前状态
ResetDC更新m_hAttribDC设备上下文
GetDeviceCaps获取有关给定显示设备功能的指定类型指定设备信息
IsPrinting确定正在使用的设备上下文是否用于打印
安全型选择帮助器 GetBrushOrg获取当前画刷的起点
SetBrushOrg指定选入设备上下文的下一个画刷的起点
EnumObjects枚举设备上下文中有效的笔和画刷
颜色和颜色调色板函数 SelectObject选择笔等GDI绘图对象
SelectStockObject选择Windows提供的预定义的一个笔、画刷或字体
绘图工具函数 GetNearestColor获取与给定设备能显示的指定逻辑颜色最接近的逻辑色
SelectPalette选择逻辑调色板
RealizePalette把当前逻辑调色板中的调色板入口映射到系统调色板
UpdateColors通过客户区当前颜色在像素基础上与系统调色板的匹配,更新设备上下文的客户区
GetHalftoneBrush获取半色调画刷
绘图属性函数 GetBkColor获取当前背景色
SetBkColor设置当前背景色
GetBkMode获取背景模式
SetBkMode设置背景模式
GetPolyFillMode获取当前多边形填充模式
SetPolyFillMode设置多边形填充模式
GetROP2获取当前绘图模式
SetROP2设置当前绘图模式
GetStretchBltMode获取当前位图拉伸模式
SetStretchBltMode设置位图拉伸模式
GetTextColor获取当前文本颜色
SetTextColor设置文本颜色
GetColorAdjustment获取用于设备上下文的颜色调整值
SetColorAdjustment使用指定值设置设备上下文的颜色调整值
映射函数 GetMapMode获取当前映射模式
SetMapMode设置当前映射模式
GetViewportOrg获取视区起点的X和Y坐标
SetViewportOrg设置视区起点
OffsetViewportOrg相对于当前视区起点坐标修改视区起点
GetViewportExt获取视区X和Y范围
SetViewportExt设置视区X和Y范围
ScaleViewportExt相对于当前值修改视区范围
GetWindowOrg获取参应窗口起点的X和Y坐标
SetWindowOrg设置设备上下文的窗口起点
OffsetWindowOrg相对于当前窗口起点的坐标修改窗口起点
GetWindowExt获取对应窗口的X和Y坐标
SetWindowExt设置对应窗口的X和Y坐标
ScaleWindowExt相对于当前值修改窗口范围
坐标函数 DPtoHIMETRIC设备单位转换为HIMETRIC单位
LPtoHIMETRIC逻辑单位转换为HIMETRIC单位
DPtoLP设备单位转换为逻辑单位
LPtoDP逻辑单位转换为设备单位
HIMETRICtoDPHIMETRIC单位转换为设备单位
HIMETRICtoLPHIMETRIC单位转换为逻辑单位
区域函数 FillRgn用指定画刷填充指定区域
FrameRgn用画刷在指定区域周围绘制边线
InvertRgn反转区域中的颜色
PaintRgn用选取的画刷填充区域
剪切函数 SetBoundsRect控制指定设备上下文绑定的矩形信息的累计
GetBoundsRect返回到设备上下文当前累计的绑定矩形
GetClipBox获取当前剪切边界周围最紧绑定矩形的维数
SelectClipRgn使用指定模式合并给定区域和当前剪切区域
ExcludeClipRect创建包含现有剪切区域减掉指定矩形的一个新剪切区域
ExcludeUpdateRgn通过从剪切区域排除窗口中的更新区域,防止在窗口的无效区域中绘图
IntersectClipRect通过构成当前区域和矩形的交集创建一个新的剪切区域
OffsetClipRgn移动给定设备的剪切区域
PtVisible确定给定点是否在剪切区域内
RectVisible确定给定矩形的任何部分是否在剪切区域内
线输出函数 GetCurrentPosition获取笔的当前位置(以逻辑坐标表示)
MoveTo移动当前位置
LineTo从当前位置到一点画直线,但不包括那个点
Arc画一段椭圆弧
ArcTo画一段椭圆弧。除了更新当前位置以外,这个函数与Arc类似
AngleArc画一条线段和圆弧,把当前位置移到圆弧终点
GetArcDirection对设备上下文返回当前圆弧方向
SetArcDirection设备圆弧和矩形函数要用到的绘图方向
PolyDraw画一组线段和Bezier样条。这个函数更新当前位置Polyline画一组与指定点连接的线段
PolyPolyline画多组相连线段。这个函数不使用也不更新当前位置
PolylineTo画一条或多条直线,并把当前位置移到最后一条直线的终点
PolyBezier画一条或多条Bezier样条。不使用也不更新当前位置
PolyBezierTo画一条或多条Bezier样条,并把当前位置移到最后一条Bezier样条的终点
简单绘图函数 FillRect用指定画刷填充给定矩形
FrameRect在矩形周围绘制边界
InvertRect反转矩形内容
DrawIcon绘制图标
DrawDragRect拖拽矩形时擦除并重绘它
FillSolidRect用实颜色填充矩形
Draw3Drect绘制三维矩形
DrawEdge绘制矩形边
DrawFrameControl绘制帧控件
DrawState显示图像并应用可视化效果来表示一个状态
椭圆和多边形函数 Chord绘制椭圆弧(椭圆和一条线段相交围成的闭合图形)
DrawFocusRect绘制用于表示焦点的风格的矩形
Ellipse绘制椭圆
Pie绘制饼形图
Polygon绘制多边形,包含由线段连接的一个或多个点(顶点)
PolyPolygon创建使用当前多边形填充模式的两个或多个多边形,多边形可以相互分开或叠加
Polyline绘制多边形,包含连接指定点的一组线段
Rectangle使用当前笔绘制矩形,用当前画刷填充
RoundRect使用当前笔绘制圆角矩形,用当前画刷填充
位图函数 PatBlt创建位特征
BitBlt从指定设备上下文拷贝位图
StretchBlt把位图由源矩形和设备移动到目标矩形,必要时拉伸或压缩位图以适合目标矩形的维数
GetPixel获取指定点像素的RGB颜色值
SetPixel设置指定点像素为最接近指定色的近似值
SetPixelV设置指定点坐标为最接近指定色的近似值。SetPixelV比SetPixel快,原因是它不用返回实际绘制点的颜色值
FloodFill用当前画刷填充区域
ExtFloodFill用当前画刷填充区域。比FloodFill成员函数提供更多灵活性
MaskBlt使用给定屏蔽和光栅操作对源和目标位图合并颜色数据
PlgBlt从源设备上下文的指定矩形到给定设备上下文中指定平行多边形,执行颜色数据位的位块传递
文本函数 TextOut用当前选取字体在指定位置写字符串
ExtTextOut用当前选取字体在矩形区域写字符串
TabbedTextOut在指定位置写字符串,制表符扩展为制表符停止位置数组中指定值
DrawText在指定矩形内绘制格式化文本
GetTextExtent使用当前字体在属性设备上下文上计算文本行的宽度和高度,确定维数
GetOutputTextExtent使用当前字体在输出设备上下文上计算文本行的宽度和高度,确定维数
GetTabbedTextExtent使用当前字体在属性设备上下文上计算字符串的宽度和高度
GetOutputTabbedTextExtent使用当前字体在输出设备上下文上计算字符串的宽度和高度
GrayString在给定位置绘制暗(灰色)文本
GetTextAlign获取文本对齐标记
SetTextAlign设置文本对齐标记
GetTextFace以空终止字符串形式把当前字体字样名拷贝到缓冲区
GetTextMetrics从属性设备上下文为当前字体获取度量
GetOutputTextMetrics从输出设备上下文为当前字体获取度量
SetTextJustification把空格添加到字符串的中断字符
GetTextCharacterExtra对字符间空格数量获取当前设置
SetTextCharacterExtra设置字符间空格数量
字体函数 GetFontData从比例字体文件获取字体度量信息。获取的信息通过指定字体文件与返回信息长度的偏移量标识
GetKerningPairs获取指定设备上下文中当前选取的字体字符实对
GetOutlineTextMetrics获取用于TrueType字体的字体度量信息
GetGlyphOutline获取用于当前字体中外线字符串的外线曲线或位图
GetCharABCWidths从当前字体获取给定范围相继字符以逻辑单位计数的宽度
GetCharWidth从当前字体获取给定范围相继字符的分数宽度
GetOutputCharWidth从使用输出设备上下文的当前字体获取相继字符组中各个字符的宽度
SetMapperFlags改变字体映射表在从逻辑字体到物理字符映射时使用的算法
GetAspectRatioFilter获取当前长宽比过滤器的设置
打印机跳离函数 QueryAbort对打印应用调用AbortPro回滚函数,询问打印是否应终止
Escape允许应用访问不能通过GDI直接使用的特殊设备的功能。同时允许访问Windows跳离函数。应用调用的Escape调用经翻译传送到设备驱动程序
DrawEscape访问通过图形设备接口(GDI)不能直接使用的视频显示器的绘图功能
StartDoc通告设备驱动程序开始一项新打印作业
StartPage通告设备驱动程序开始新页
EndPage通告设备驱动程序页结束
SetAbortProc如果打印作业必须终止,设置Windows调用的由程序员提供的回滚函数
AbortDoc终止当前打印任务,擦除自上次调用StartDoc成员函数以来应用写入设备的任何内容
EndDoc结束由StartDoc成员函数启动的打印作业
滚动函数 ScrollDC水平和垂直滚动位矩形
元文件函数 PlayMetaFile在给定设备上播放指定元文件类型。增强版本的PlayMetaFile显示以增强格式元文件保存的图片。元文件可以播放任意次数
AddMetaFileComment从缓冲区把注释拷贝到指定增强格式元文件
路径函数 AbortPath关闭并拒绝设备上下文中任何路径
BeginPath打开设备上下文中一个路径括号
CloseFigure关闭路径中一个打开的图表
EndPath关闭一个路径括号,并把括号定义的路径选择到设备上下文
FillPath关闭当前路径中任何打开的图表,并用当前画刷和多边形填充模式填充路径内部
FlattenPath变形选取到当前设备上下文路径中的任何曲线,把曲线变成一系列直线
GetMiterLimit返回用于设备上下文的限制
GetPath获取定义直线端点和从选择到设备上下文路径中找到的曲线控制点的坐标
SelectClipPath对设备上下文选择当前路径作为剪切区域,通过使用指定模式合并新区域和任何现有剪切区域
SetMiterLimit设备用于设备上下文的连接长度限制
StrokeAndFillPath关闭路径中任何打开的图表,使用当前笔点路径外线,使用当前画刷填充它内部
StrokePath使用当前笔描绘指定路径
WidenPath如果路径使用过了当前选取到设备上下文中的笔点,重新定义当前路径为要画的区域
关于成员函数和函数成员与成员函数的区别的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。