类
类的定义:类是一种复杂的数据类型它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。因此,类具有对数据的抽象性,隐藏性和封装性。类是C++程序中最常用的自定义数据类型。
说白了,类就是将现实世界中具有相同属性的一类客观事物的抽象,而对象就是类的一个实例,这就是对象。
类的定义格式:
类的定义格式一般分为两大部分:说明部分和实现部分。说明部分用来说明该类中的若干成员,包括被说明的数据成员和成员函数。数据成员的说明包括该数据成员的名字和它的类型,成员函数是用来对数据成员进行操作的类内函数。类的说明部分和实现部分都可以放在类体内,也可以将说明部分放在类体内,实现部分放在类体外。
//说明部分
class <类名>
{
public:
<数据成员和成员函数的说明或实现>
private:
<数据成员和成员函数的说明或实现>
};
//实现部分(如果成员函数在类体内没有写出它们的函数体就需要在类体外用到这种方法去实现)
<函数类型> <l类名> :: <成员函数名> ( <参数表> )(作用域运算符(::)用来表示某个成员函数属于哪个类)
{
<函数体>
}
类的成员可以分为三种:
public 公有成员不仅可以被成员函数引用,而且也可以在程序中被引用。通常将类中的全部或部分的成员函数定义为公有成员。
private 私有成员是被隐藏的数据,只有该类的成员函数或友元函数才可以引用它,在程序中不可访问。通常将一些数据成员定义为私有成员。
protected 保护成员在不同的条件下,具有公有成员或私有成员的特性。
定义类的时候应注意:
1,类体内包含数据成员和成员函数。数据成员可以是C++语言所允许的所有类型,也可以是另一个类的对象和指向对象的指针,但是不能是自身类的对象,可以是自身类的指针或引用。
2,在类体内,允许对成员函数进行定义,但是不允许对数据成员进行初始化。
3,一般习惯在类体内先说明公有成员,在说明私有成员。
4,在说明数据成员时,一般按其成员类型的大小,由小到大说明。
5,一般习惯将类定义的说明部分或者整个定义部分放在一个头文件中。
举例来说明两种的类的定义方法:
编程描述点坐标的类的头文件:
<span style="font-size:18px;">class Tpoint//Tpoint为类名
{
public://四个公有成员,两个在类体内实现,两个在类体外实现
void Setpoint(int x,int y);
int Xcoord() { return X; }
int Ycoord() { return Y; }
void Move(int xoffset,int yoffset);
private://两个私有成员
int X,Y;
};
void Tpoint::Setpoint(int x,int y)//成员函数在类体外的实现部分
{
X=x;
Y=y;
}
void Tpoint::Move(int xoffset,int yoffset)
{
X+=xoffset;
Y+=yoffset;
}</span>
对象的定义格式;
对象是类的实例,任何一个对象都是属于某个已知类的,在定义对象之前必须先定义类。在使用类定义对象时,直接用类名,不需要在类名前加关键字Class。
<类名> <对象名表> 对象名表中可以是一般的对象名,也可以是指向对象的指针名或引用名,还可以是对象书名。
对象的成员表示:
一个对象的成员就是该对象所属类的成员。
一般对象的成员表示:<对象名> . <数据成员名>
<对象名> . <成员函数名> < (参数表) >
指向对象的指针的成员表示:<对象指针名> -> <数据成员名>
<对象指针名> -> <成员函数名> < (参数表) >
对象引用的成员表示:<对象名> . <数据成员名>
<对象名> . <成员函数名> < (参数表) >
还是描述坐标的例子,在定义完类后,我们再来定义对象和输出所想要的结果:
<span style="font-size:18px;">#include <iotream.h>
#include "tpoint.h"
void main()
{
Tpoint p1,p2,*p
p=new Tpoint;
p1.Setpoint(3,8);
p2.Setpoint(6,8);
p->Setpoint(5,7);
p1.Move(2,2);
p2.Move(-1,-1);
(*p).Move(3,-3);
cout<<"x1="<<p1.Xcoord()<<",y1="<<p1.Ycoord()<<endl;
cout<<"x2="<<p2.Xcoord()<<",y2="<<p2Ycoord()<<endl;
cout<<"x3="<<p->Xcoord()<<",y3="<<(*p).Ycoord()<<endl;
}</span>
<span style="font-size:18px;"> </span>
也可以是将两个文件命令的内容在组合到一起;
<span style="font-size:18px;">#include <iostream.h>
class Tpoint//Tpoint为类名
{
public://四个公有成员,两个在类体内实现,两个在类体外实现
void Setpoint(int x,int y);
int Xcoord() { return X; }
int Ycoord() { return Y; }
void Move(int xoffset,int yoffset);
private://两个私有成员
int X,Y;
};
void Tpoint::Setpoint(int x,int y)//成员函数在类体外的实现部分
{
X=x;
Y=y;
}
void Tpoint::Move(int xoffset,int yoffset)
{
X+=xoffset;
Y+=yoffset;
}
void main()
{
Tpoint p1,p2,*p;
p=new Tpoint;
p1.Setpoint(3,8);
p2.Setpoint(6,8);
p->Setpoint(5,7);
p1.Move(2,2);
p2.Move(-1,-1);
(*p).Move(3,-3);
cout<<"x1="<<p1.Xcoord()<<",y1="<<p1.Ycoord()<<endl;
cout<<"x2="<<p2.Xcoord()<<",y2="<<p2.Ycoord()<<endl;
cout<<"x3="<<p->Xcoord()<<",y3="<<(*p).Ycoord()<<endl;
}</span>
输出的结果为: