第八章、类和对象
本章我们来学习 C++ 中的结构体、类以及他们常见的变量(对象)。
1. C++ 结构体
C++ 的结构体在 C 语言结构体的基础上进行的扩展,其内部可以定义函数,这些函数称之为成员函数。
语法
struct 结构体名 {
类型1 成员变量名1;
类型2 成员变量名2;
...
返回类型1 成员函数名1(参数列表1) { }
返回类型2 成员函数名2(参数列表1) { }
};
说明
- 结构体内的成员函数在调用时,优先访问内部的局部变量,然后是结构体内的成员变量,再然后才是全局变量。
- 成员函数的定义方式和全局函数的定义方式相同,也支持缺省参数、函数重载和内联。
- 在 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
练习
-
写一个 C++ 的结构体
struct school,用于描述学校的信息,包含学校的名称,学校的学生数,以及学校学生的信息(数组)。学生的信息可以是另外一个结构体类型如struct student描述。学校有几个成员函数如下:- 添加一个新学生
void add_student(void){...}。 - 根据名字删除一个学生
bool del_student(std::string name){...}。成功返回 true,失败返回 false。 - 列出所有学生的信息
void list_all(void) {...}
- 添加一个新学生
-
在主函数中创建两个学校类型的变量,然后对这两个学校的数据进行操作。