第八章、类和对象

本章我们来学习 C++ 中的结构体、类以及他们常见的变量(对象)。

1. C++ 结构体

C++ 的结构体在 C 语言结构体的基础上进行的扩展,其内部可以定义函数,这些函数称之为成员函数。

语法

struct 结构体名 {
    类型1 成员变量名1;
    类型2 成员变量名2;
    ...
    返回类型1 成员函数名1(参数列表1) { }
    返回类型2 成员函数名2(参数列表1) { }
};

说明

  1. 结构体内的成员函数在调用时,优先访问内部的局部变量,然后是结构体内的成员变量,再然后才是全局变量。
  2. 成员函数的定义方式和全局函数的定义方式相同,也支持缺省参数、函数重载和内联。
  3. 在 C++ 语言中,使用结构体定义变量时可以省略 struct关键字。即 C 语言中定义结构体类型的变量必须写成 struct student s1; 则在 C++ 语言中则可以写成 student s1

成员函数的调用语法

C++ 的成员函数要借助于该类型的变量(对象)来调用,语法如下:

变量.成员函数名(调用实参列表)

示例

// filename: cpp_struct.cpp
#include <iostream>

using namespace std;

struct student {
    std::string name;
    int age;
    void set_age(int new_age) {
        age = new_age;
    }
    void show_info(void) {
        cout << "姓名:" << name << ",年龄:" << age << endl;
    }
};

int main(int argc, char * argv[]) {
    student s1 = {"张三", 20}, s2 = {"李四", 16};

    s1.show_info();
    s1.set_age(21);
    s1.show_info();

    s2.show_info();

    return 0;
}

编译和运行结果如下

weimz@mzstudio:~$ g++ -o cpp_struct cpp_struct.cpp
weimz@mzstudio:~$ ./cpp_struct 
姓名:张三,年龄:20
姓名:张三,年龄:21
姓名:李四,年龄:16

练习

  1. 写一个 C++ 的结构体 struct school,用于描述学校的信息,包含学校的名称,学校的学生数,以及学校学生的信息(数组)。学生的信息可以是另外一个结构体类型如 struct student描述。学校有几个成员函数如下:

    • 添加一个新学生 void add_student(void){...}
    • 根据名字删除一个学生 bool del_student(std::string name){...}。成功返回 true,失败返回 false。
    • 列出所有学生的信息 void list_all(void) {...}
  2. 在主函数中创建两个学校类型的变量,然后对这两个学校的数据进行操作。