
成员函数相当于C或C++中的函数。你应该用如下的方式说明一个成员函数:
Type name (Parameter)
//function body
注意:每一个成员函数必须返回一个值或声明返回为空(void)。它返回类型的说明告诉编译器它将返回什么类型的值。在某些情况下,成员函数需要表示它是否成功的完成了它的工作,此时返回类型通常为布尔型的。参数表是用逗号分开的一组变量,它将为成员函数提供所需信息。
下面例子中定义了一个成员函数。通过它,你的矩形类可以计算自己的面积了:
int getArea(int w,int h)
{
int a;
a=wh;
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=wh;
return a;
}
public void drawRect()
{
int i,j;
for(i=width;i>0;i--)
Systemoutprint("#");
Systemoutprint("") ;
for(i=height-2;i>0;i--)
Systemoutprint("#");
for(j=width-2;i>0;j--)
Systemoutprint("");
Systemoutprint("#");
for(i=width;i>0;i--)
Systemoutprint("#");
Systemoutprint("");
}
} //Rectangle
int w=IntegervalueOf(args[0])intValue();
int h=IntegervalueOf(args[1])intValue();
Rectangle myrect=new Rectangle(w,h);
myrectdrawRect();
}
}
上例中最后一个“#”号后面还有一个Systemoutprint("")这是由于这个成员函数在上一行没有结束而且缓冲区没有溢出时将不把输出结果写屏。若你使用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成员函数使用了Systemoutprintln成员函数,但实际上你却未曾创建一个某个System类的对象,这正是因为out是System类的一个静态变量,所以你可以直接使用这个成员函数而无须定义一个System对象。
5:构造和析构成员函数
类有一个特殊的成员函数叫做构造成员函数,它通常用于初始化类的数据成员。在创建对象时,会自动调用类的构造成员函数。Java中的构造成员函数必须与该类具有相同的名字,另外,构造成员函数一般都应用public类型来说明,这样才能在程序任意的位置创建类的实例--对象。
下面是一个Rectangle类的构造成员函数,它带有两个参数,分别表示矩形的长和宽:
public Rectangle(int w,int h)
{
width=w;
height=h;
area=getArea(w,h);
}
除了构造成员函数以外,类还提供了析构成员函数,当对象被从内存中删除时,该成员函数将会被自动调用。通常,在析构成员函数内,你可以填写用来回收对象内部的动态空间的代码。
就是类里面的所有东西,包括成员变量和成员函数,类是对现实生活中一类具有共同特征的事物的抽象。如果一个程序里提供的类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改。一组经过很好选择的用户定义的类会使程序更简洁。
此外,它还能使各种形式的代码分析更容易进行。特别地,它还会使编译器有可能检查对象的非法使用。
扩展资料类的内部封装了方法,用于 *** 作自身的成员。类是对某种对象的定义,具有行为(be-havior),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行 *** 作的程序和过程。它包含有关对象行为方式的信息,包括它的名称、方法、属性和事件。
类的构成包括数据成员和成员函数。数据成员对应类的属性,类的数据成员也是一种数据类型,并不需要分配内存。成员函数则用于 *** 作类的各项属性,是一个类具有的特有的 *** 作,比如“学生”可以“上课”,而“水果”则不能。类和外界发生交互的 *** 作称为接口。
-类
//2
类模板编程//(1)定义一个类模板Point,有两个私有数据成员:x,y(变量类型可变);成员函数的定义必须写在类外//(2)要求编写的类模板能够完成下述main()函数的功能/int
main(){
Point
p(2);
pprint();
return
0;}
/#includeusing
namespace
std;templateclass
Point{
public:
Point(numtype
a,numtype
b=0)
{
x=a;
y=b;
}void
print(){
cout
p(2);
pprint();
return
0;}现在这个程序运行没有问题,但是怎么把成员函数的定义在类外呢
我试了几次总是有错
不知道怎么把函数正确移到类外去
谢谢帮忙了
感激ing
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)