一、类的定义
类是对一组性质相同的对象的程序描述,也属于一种用户自己构造的数据类型,也要遵循C++的规定,如先声明后使用、是具有唯一标识符的实体、在类中声明的任何成员不能用extern、auto和register关键字修饰、类中声明的变量属于该类等。与其他数据类型不同的是,类除了数据,还可以有对数据进行操作的函数,分别称为类的数据成员和成员函数,而且不能在类的声明中对数据成员使用表达式进行初始化。
1、声明类
C++中声明类的一般形式为:
class 类名{
private:
私有数据和函数
public:
公有数据和函数
protected:
保护数据和函数
};
类的声明以关键字class开始,其后跟类名,类所声明的内容用花括号括起来,
称为类体,右花括号后的分号作为类的声明语句的结束标志。
类中定义的数据和函数称为这个类的成员,无论是数据成员还是成员函数,均具
有一个访问权限,分别是私有、公有和保护,通过前加关键字private、public
和protected来定义,如无关键字,则所有成员默认声明为private权限
成员函数在声明后还必须在程序中通过定义来实现对数据成员的操作。定义成员函数的一般形式为:返回类型 类名::成员函数名(形参列表) {成员函数的函数体 //内部实现}其中“::”是作用域运算符,类名是指成员函数所属类的名字,用于表示其后的成员函数属于这个特定的类。其中返回类型是指这个成员函数返回值的类型。
如:
void Point :: Setxy(int a,int b)
{
x=a;
y=b;
}
语句表示定义属于Point类的成员函数Setxy,该成员函数带有两个整型形参,函数没有返回值。可以使用关键字inline将成员函数定义为内联函数
如:
inline int Point :: Getx()
{
return x;
}
如果在声明类的同时,在类体内给出成员函数的定义,也默认为内联函数,例将声明Getx的语句
“int Getx();”改为
“int Getx(){
return x;
}”,则Getx为内联函数
赋值和初始化是两个不同的概念:
赋值是在有了对象A之后,对象A调用成员函数Setxy实现的,如
A.Setxy(25,56);,不能在类体内或类体外面给数据成员赋值,例如用语句
“int x=25,y=56;”
给类的数据成员赋值,那么不论是在类体内还是类体外,都是错误的,类的数据
成员的赋值,除通过例如语句”B=A;”实现,就只能通过调用类的赋值成员函数或构造函数才能实现。
初始化是指产生对象时就使对象的数据成员具有指定值,它是通过使用与类同名
的构造函数实现的,如在类体中声明构造函数Point(int,int)后,在主函数中
利用构造函数产生对象B并初始化:
Point B(15,25)。
不能在类体内或类体外面给数据成员赋值,当然在类体外面就更不允许了。
数据成员的具体值是用来描述对象的属性的。只有产生了一个具体的对象。
这些数据值才有意义。
如果在产生对象时就使对象的数据成员具有指定值,则称为对象的初始化。
赋初值是在有了对象之后,对象调用自己的成员函数实现赋值操作;
例如对Point类,使用Point在程序中声明变量,具有Point类的类型的变量称为Point的
对象,只有产生类的对象后,才能使用类的数据成员和成员函数。 类Point不仅可以声明对象,还可以定义对象的引用和对象的指针,其中对象和引用都
使用运算符“.”访问对象的数据成员和成员函数,指针则使用“->”运算符,语法如下:
Point A,B; //定义Point类型的对象A和B
Point *p=&A; //定义指向对象A的Point类型的指针p
Point &R=B; //定义R为Point类型对象B的引用
A.Setxy(25,88); //为对象A赋初值
R.Display(); //显示对象B的数据成员之值
p->Display(); //显示指针p所指对象的数据成员之值
如果在上例中的print函数或主函数使用如下语句,将产生错误:cout<<A.x<<”,”<<A.y<<endl; 这是因为x和y都是对象A的私有数据成员,不能在类的外面直接使用它们,而只能通过类中的公有成员函数来使用它们。
类的成员函数可以直接使用自己类的私有成员(数据成员和成员函数);
类外面的函数不能直接访问类的私有成员,而只能通过类的对象使用该类的公
有成员函数
对象A和B的成员函数的代码一样,两个对象的区别是属性的取值。
类名* 对象指针名;对象指针名=对象的地址;也可以直接进行初始化。即:类名 * 对象指针名=对象的地址;类对象的指针可以通过"->"运算符访问对象的成员,即:对象指针名->对象成员名
1.面向对象的程序设计是通过为数据和代码建立分块的内存区域,以便提供对程序进行模块化的一种程序设计方法,这些模块可以被用作样板,在需要时再建立副本。由此,对象是计算机内存中的一块区域,通过将内存分块,每个模块在功能上保持相对独立。
2.面向对象是消息处理机制,对象之间只能通过成员函数调用实现相互通信。当对象的一个函数被调时,对象执行其内部的代码来响应这个调用,使对象呈现出一定的行为,对象被视为能作出动作的实体,对象使用这些动作完成相互之间的作用。
3.C++通过类实现数据封装,即通过指定各成员的访问权限来实现。一般