类可以将变量、数组和函数完美地打包在一起。

    1. 类与结构体
      类的定义:
    1. class Person {
    2. private:
    3. int age, height;
    4. double money;
    5. string books[100];
    6. public:
    7. string name;
    8. void say() {
    9. cout << "I'm " << name << endl;
    10. }
    11. int get_age() {
    12. return age;
    13. }
    14. void add_money(double x) {
    15. money += x;
    16. }
    17. };

    类中的变量和函数被统一称为类的成员变量。

    private后面的内容是私有成员变量,在类的外部不能访问;public后面的内容是公有成员变量,在类的外部可以访问。

    类的使用:

    1. #include <iostream>
    2. using namespace std;
    3. const int N = 1000010;
    4. class Person {
    5. private:
    6. int age, height;
    7. double money;
    8. string books[100];
    9. public:
    10. string name;
    11. void say() {
    12. cout << "I'm " << name << endl;
    13. }
    14. int set_age(int a) {
    15. age = a;
    16. }
    17. int get_age() {
    18. return age;
    19. }
    20. void add_money(double x) {
    21. money += x;
    22. }
    23. } person_a, person_b, persons[100];
    24. int main() {
    25. Person c;
    26. c.name = "yxc"; // 正确!访问公有变量
    27. c.age = 18; // 错误!访问私有变量
    28. c.set_age(18); // 正确!set_age()是共有成员变量
    29. c.add_money(100);
    30. c.say();
    31. cout << c.get_age() << endl;
    32. return 0;
    33. }

    结构体和类的作用是一样的。不同点在于类默认是private,结构体默认是public

    1. struct Person {
    2. private:
    3. int age, height;
    4. double money;
    5. string books[100];
    6. public:
    7. string name;
    8. void say() {
    9. cout << "I'm " << name << endl;
    10. }
    11. int set_age(int a) {
    12. age = a;
    13. }
    14. int get_age() {
    15. return age;
    16. }
    17. void add_money(double x) {
    18. money += x;
    19. }
    20. } person_a, person_b, persons[100];
    1. 指针和引用
      指针指向存放变量的值的地址。因此我们可以通过指针来修改变量的值。
    1. #include <iostream>
    2. using namespace std;
    3. int main() {
    4. int a = 10;
    5. int *p = &a;
    6. *p += 5;
    7. cout << a << endl;
    8. return 0;
    9. }

    数组名是一种特殊的指针。指针可以做运算:

    1. #include <iostream>
    2. using namespace std;
    3. int main() {
    4. int a[5] = {1, 2, 3, 4, 5};
    5. for (int i = 0; i < 5; i++)
    6. cout << *(a + i) << endl;
    7. return 0;
    8. }

    引用和指针类似,相当于给变量起了个别名。

    1. #include <iostream>
    2. using namespace std;
    3. int main() {
    4. int a = 10;
    5. int &p = a;
    6. p += 5;
    7. cout << a << endl;
    8. return 0;
    9. }
    1. 链表
    1. #include <iostream>
    2. using namespace std;
    3. struct Node {
    4. int val;
    5. Node *next;
    6. } *head;
    7. int main() {
    8. for (int i = 1; i <= 5; i++) {
    9. Node *p = new Node();
    10. p->val = i;
    11. p->next = head;
    12. head = p;
    13. }
    14. for (Node *p = head; p; p = p->next)
    15. cout << p->val << ' ';
    16. cout << endl;
    17. return 0;
    18. }