类和对象
类是用户自定义数据类型。如果程序中要使用类类型,必须根据实际需要定义,或者使用已设计好的类。
C++定义一个类,一般形式为:
class类名{
成员列表
};
其中成员列表是类成员的集合,数目不限。{}是成员列表边界符,与成员列表一起称为类体。类体后面必须用分号结束。
每个类可以没有成员,也可以有多个成员,类成员可以是数据或函数。
所有成员必须在类的内部声明,一旦类定义完成后,就没有任何其他方式可以再增加成员了。
定义类:
类定义时必须给出各个数据成员的数据类型声明,
一般形式为:
c1ass类名{
…
数据成员类型数据成员名列表;
…
};
声明时成员名列表允许为多个,用逗号作为间隔,最后必须用分号结束。
在类中定义成员函数,形式如下
c1ass类名{
…
返回类型 函数名(形式参数列表)
{
函数体
}
…
};
成员函数的声明在类中,定义在类外部,形式
c1ass类名{
…
返回类型函数名(类型1参数名1,类型2参数名2…);
返回类型函数名(类型1,类型2,);
…
返回类型 类名::函数名(形式参数列表)
{
函数体
}
成员的访问控制:
无论数据成员还是函数成员,类的每个成员都有访问控制属性,由
以下三种访问标号说明:public(公有的)、 private(私有的)和
protected(保护的)
公有成员用 public标号声明,类成员和类用户都可以访问公有成员,
任何一个来自类外部的类用户都必须通过公有成员来访问。public实现了类的外部接口。
定义构造函数:
C++规定构造函数的名字与类的名字相同,并且不能指定返回类型。
定义形式为
类名(形式参数列表)
{
函数体
}
构造函数可以没有形参
类名()
{
函数体
}
类名(void)
{
函数体
}
构造函数初始化列表
构造函数具有函数名、形参列表和函数体,构造函数可以包含一个构造函数初始化列表,一般形式为
类名(形式参数列表):构造函数初始化列表
{
函数体
}
析构函数的定义:
C++规定析构函数的名字是类名的前面加一个波浪号(~)。其定义形式为:
~类名()
{
函数体
}
析构函数不返回任何值,没有返回类型,也没有函数参数。由于没有函数参数,因此它不能被重载。一个类可以有多个构造函数,但是只能有一个析构函数。
静态数据成员:
静态数据成员是类的一种特殊数据成员
声明形式为
class类名{
…
static数据成员类型 数据成员名列表;
…
};
静态成员不能被const限定;
静态成员只能在类外定义一次。
静态成员就是专门访问静态数据的成员。
友元函数:
C++提供友元机制,允许一个类将其非公有成员的访问权授予指定的函数或类。友元的声明只能出现在类定义的内部的任何地方,由于友元不是授予友元关系的那个类的成员,所以它们不受访问控制的影响。友元声明放在类定义的开始或结尾。
友元函数:
如果在一个类以外的某个地方定义了一个函数,在类定义中用friend对其进行声明,此函数就称为这个类的友元函数。友元函数可以访问这个类中的私有成员。