2. 类的概念

C 语言中已经定义好的基础数据类型有:

标准 C++ 中又增添了一个布尔数据类型(bool)。

以上数据类型都定义在编译器内,他的操作行为不可以被修改。

在 C 语言中如果要定义复杂的组合的数据类型可以使用结构体(struct)和类(class)来定义新的数据类型。本节课先学习结构体的扩展用法。

在 C 语言中,上述这些称之为数据类型,在 C++ 中叫做;C 语言中上述类型创建变量在 C++ 语言中则称之为对象

类(class)和对象(object) 示意

int 是类        100、0、-2 是真实存在的对象

      / ------ 100
int  +  ------  0 
      \ ------ -2

float 是类       3.14、2.71 是对象

结构体类型定义类和对象

// 自定义类型 Car
struct Car{
    string brand; // 品牌
    string number; // 车牌号
    string color;  // 颜色
    void run(float speed) {}
};

// 创建 Car 类型的对象car1, car2
Car car1, car2;

C++ 中给出了类和对象的概念是为了让程序编写者能够更好地将代码和现实逻辑结合起来。比如,狗就是现实中的一个类,而你家的狗和邻居家的小狗都是具体的对象。

为了更好的模拟现实,C++ 的结构体和后面要讲的都提供了成员变量成员函数的概念。

现实世界中,每个对象都有很多的属性行为特征。属性通常是用于描述一种类型中每个对象自己的数据。如每个人都有姓名(name)、性别(gender)、年龄(age)、身高(height)等,但通常各个对象的属性又大不相同。行为代表每种类型的对象共同的功能或动作,通常用成员函数来表示。比如:吃(eat)、走(walk)、学习(study)等。

C++类中使用成员变量来描述类的属性,使用成员函数来描述该类对象的行为。

以下定义一个人类(Human)的属性和行为。

struct Human{
    string name; // 姓名
    string gender; // 性别
    int age; // 年龄
    float height; // 身高
    void eat (string food) {};  // 吃
    void walk(float km) {}  // 走路
    int study(string subject){} // 学习
};

上述结构体就定义了人(Human)这个类的属性name,genderageheight,并且此类创建的每个对象(变量)都有不同的属性值。而人类相应的行为eatwalkstudy,他们都是函数,是定义在结构体内部的函数。这写函数只能由 Human 创建的对象来使用。如:

Human zhangsan = {"张三", "男", 18, 1.80};
zhangsan.eat("烤鸭");
zhangsan.walk(5);
zhangsan.study("C++");

实验

尝试完善上述代码,创建张三、李四两个对象,然后访问各自的成员变量,调用各自的成员函数。