类的定义规范由两个部分组成:
类声明:以数据成员的方式描述数据部分,以成员函数的方式描述共有接口。
类方法定义:描述如何实现类的成员函数
1、类的定义:
class 类名称
{
private:
·····;
·····;
public:
·····;
·····;
};
关键词private,public描述了对类成员的访问控制,使用类的对象的程序可以直接访问公有部分,但只能通过公有成员函数或者友元函数来访问对象的私有成员。
数据定义通常放在私有部分,从而实现数据隐藏;组成类接口的成员函数放在共有部分。
2、类中声明原型表示的成员函数的实现
注意:需要使用 作用域解析符(::)来标识函数所属的类。并且,这些成员函数,可以访问类的私有数据成员。
内联方式:
其定义位于类声明中的函数都将自动成为内联函数。内联函数也可定义在类声明之外(一般放在定义类的头文件中,位于类定义之后),并使用inline关键词放在函数的实现之前,如:
class stock
{
private:
set();
public:
};
inline void stock::set()
{
·············;
}
内联函数的作用:在编译的时候,将函数体嵌入在每一个调用处,类似宏定义,这样就消除了频繁调用函数的时间开销。一般被定义成内联函数的都是非常小的函数(没有循环、递归)。
对象
对象的定义:类名 对象名;如stock joe;
对象使用成员函数:对象名.成员函数名;如joe.show();
调用成员函数时,成员函数使用的是调用它的对象的数据成员。
类所创建的每个对象都有自己的存储空间,存储其内部变量和类成员。但每一个对象都共享类的同一组方法。
类的构造函数和析构函数
构造函数是为了在构造类的新对象时,对对象的数据成员进行初始化。
类的构造函数的名字与类名相同,并且定义时没有返回类型。程序声明类对象时,自动调用构造函数。
使用构造函数的方法:
Stock food=Stock("dff",2,32);
或Stock food("dsc",43,6);
类的对象不能调用构造函数。
当使用Stock food;这种方式定义类的对象时,将自动调用默认的构造函数来完成对象的初始化。
默认的构造函数为:Stock::Stock(){} (没有参数或者所有参数都设为给定默认值)
默认的构造函数可以不写,但是如果为类定义了别的构造函数之后,默认构造函数就必须写出来。
析构函数
类的对象过期时,将自动调用析构函数,完成清理工作。如构造函数使用new来分配内存,则析构函数将使用delete来释放内存。
析构函数没有参数,没有声明类型,没有返回值,定义为:~类名();
析构函数的调用由编译器决定,一般不用在代码中显示的调用析构函数。
每个类都只能有一个析构函数。
一般情况下,将类声明部分放在.h文件中,将类方法实现部分放在.cpp文件中。
#include "··.h"意味着编译器将在源文件所在的目录中搜索.h文件
默认情况下,将一个对象赋给同类的另一个对象时,源对象中的每个数据成员的内容被复制到目标对象中的相应数据成员中。
由于创建类的对象的局部变量被存放在堆栈中,因此,在删除对象时将先删除最后创建的对象。
const成员函数
定义:返回类型 成员函数名()const
这种方式声明、定义的函数成为const成员函数,表示该类成员函数不修改调用对象。
只要类方法不修改调用对象,就应当将它声明为const。
通过函数重载,可以创建多个同名的构造函数,但是函数的参数列表必须不同。