一、类和对象

C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心特性,通常被称为用户定义的类型。类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。
打个比方说明一下什么是类,比如有一条小狗,小狗有名字叫旺财,旺财的年龄是 2 岁,同时旺财会汪汪的叫,也能跑。我们统称狗这个为类,类是我们抽象出来的,因为狗不只有上面的属性,还有体重,毛发的颜色等等,我们只抽象出几种属性成一个类。具体到哪条狗就叫
对象。
从类中实例化对象分两种方法,一种是从栈中实例化对象,一种是从堆中实例化对象。
在 Ubuntu 上编辑一个 03_class_dog_example 目录,在 03_class_dog_example 目录下新建
一个 03_class_dog_example.cpp 文件

1 #include <iostream>
2 #include <string>
3 using namespace std;
4
5 class Dog
6 {
7 public:
8 string name;
9 int age;
10
11 void run() {
12 cout<<"小狗的名字是:"<<name<<","<<"年龄是"<<age<<endl;
13 }
14 };
15
16 int main()
17 {
18 Dog dog1;
19
20 dog1.name = "旺财";
21 dog1.age = 2;
22 dog1.run();
23
24 Dog *dog2 = new Dog();
25
26 if (NULL == dog2) {
27 return 0;
28 }
29 dog2->name = "富贵";
30 dog2->age = 1;
31 dog2->run();
32
33
34 delete dog2;
35 dog2 = NULL;
36 return 0;
37 }

第 5 行,定义了一个 Dog 狗,定义类时,起的类名要尽量贴近这个类,让人一看就明白,您这个类是做什么的。
第 7 行,访问限定符 public(公有的),此外还有 private(私有的)和 protected(受保护的)。写这个的目的是为了下面我们要调用这些成员,不写访问限定符默认是 private。关于访问限定
符,简单的来说,访问限定符就是设置一个成员变量和成员函数的访问权限而已.
第 8 至 11 行,定义了一个字符串变量 name,整形变量 age。和一个方法 run()。我们在这个 run()里打印相应的狗名和狗的年龄。PS:string 是 C++的数据类型,方便好用,使用频率相当高。
第 18 行,从栈中实例化一个对象 dog1(可以随意起名字)。
第 20 至 22 行,为 dog1 的成员变量赋值,dog1 的 name 赋值叫“旺财”,年龄为 2 岁。然后调用 run()方法,打印 dog1 的相关变量的信息。
第 24 行,从堆中实例化对象,使用关键字 new 的都是从堆中实例化对象。
第 26 行,从堆中实例化对象需要开辟内存,指针会指向那个内存,如果 new 没有申请内存成功,p 即指向 NULL,程序就自动退出,下面的就不执行了,写这个是为了严谨。
第 29 至 31 行,和 dog1 一样,为 dog2 的成员赋值。
第 34 和 35 行,释放内存,将 dog2 重新指向 NULL

然后编译运行

(刚才的代码里少了一个;)
通过上面的例子我们已经知道了什么是类,和什么是对象。以描述 Dog 为一类(抽象出来的),从 Dog 类中实例出来就是对象(实际事物)。对象拥有 Dog 类里的属性,可以从栈中实例化对象,亦可从堆中实例化对象。