类
先回忆一下对象(object)。对象表示现实世界一个独一无二的实体,一个对象具有唯一的身份,状态,行为。
- 一个对象的状态(state,也称为属性)用数据域及他们当前的值表示。例如一个对象“圆”,有数据域“半径”,它是刻画圆的属性。
- 一个对象的行为(behavior,也称为动作)由一组函数定义。对一个对象调用一个函数就是请求对象执行一个操作。例如可以为“圆”对象定义一个函数getArea(),一个“圆”对象可以通过调用getArea()得到它的面积。
相同类型的对象可以用一个通用的类来定义。类(class)就是一个模板或者说约定,定义了这些相同类型的对象具有怎样的数据域和函数。一个对象就是一个类的实例,我们可以创建一个类的多个实例。
实例化是指创建一个实例的过程。通常情况下,术语“对象”和“实例”是等价的。
在一个类里,用变量定义数据域,用函数定义行为。
类里面还有一种特殊的函数,叫做构造函数。它没有返回类型,只是执行一系列操作(操作可以没有),它的函数名一定与类名一样。构造函数可以有多个,但是参数不同。
构造函数的主要目的是为了初始化对象。
可以把类看成是一种数据类型,构造函数就是在初始化这个类型的数据。
下面定义一个圆的类:
class Circle { //public是一个关键字,类似的关键字还有private等,用来说明数据域和函数的访问权限 public: //数据域,圆的半径 double radius; //定义常量PI const double PI = 3.14159; //无参构造函数,即没有参数的构造函数 Circle() { //若调用无参构造函数,则圆的半径为1 radius = 1; } //有参构造函数,即带有参数的构造函数 Circle(double newRadius) { //若调用有参构造函数,则圆的半径为newRadius radius = newRadius; } //行为,获取圆的面积 double getArea () { return radius*radius*PI; } };
对象
创建对象:
#include <iostream> using namespace std; class Circle { //public是一个关键字,类似的关键字还有private等,用来说明数据域和函数的访问权限 public: //数据域,圆的半径 double radius; //定义常量PI const double PI = 3.14159; //无参构造函数,即没有参数的构造函数 Circle() { //若调用无参构造函数,则圆的半径为1 radius = 1; } //有参构造函数,即带有参数的构造函数 Circle(double newRadius) { //若调用有参构造函数,则圆的半径为newRadius radius = newRadius; } //行为,获取圆的面积 double getArea () { return radius*radius*PI; } }; int main() { //调用无参构造函数 Circle c1; //调用有参构造函数,参数为1 Circle c2(1); //调用有参构造函数,参数为3 Circle c3(3); cout << "c1的半径是" << c1.radius << ",面积是" << c1.getArea() << endl; cout << "c2的半径是" << c2.radius << ",面积是" << c2.getArea() << endl; cout << "c3的半径是" << c3.radius << ",面积是" << c3.getArea() << endl; return 0; }
运行结果:
参考资料
[1] C++程序设计 原书第3版 [(美)梁勇著][机械工业出版社]