【C++ 】第二章——类(Class)学习笔记

发布于:2025-07-12 ⋅ 阅读:(10) ⋅ 点赞:(0)

1. 什么是类(Class)

类是 C++ 的核心特性,用来描述具有相同属性和行为的一组对象。类是“模板”,对象是“实例”。

class 类名 {
  // 成员变量(属性)
  // 成员函数(行为)
};

2. 类的定义与使用

📌 定义一个类

class Person {
public:
    std::string name;
    int age;

    void sayHello() {
        std::cout << "Hello, I am " << name << std::endl;
    }
};

📌 使用类创建对象

int main() {
    Person p;
    p.name = "Tom";
    p.age = 20;
    p.sayHello();  // 输出:Hello, I am Tom
    return 0;
}

3. 访问控制关键字

关键字 说明
public 公有,任何地方都能访问
private 私有,仅类内部可访问
protected 受保护,继承时相关
class Test {
public:
    int x;         // 公有成员
private:
    int y;         // 私有成员
};

4. 构造函数与析构函数

🔹 构造函数:创建对象时自动调用

同类名,可重载无返回值

🔹 析构函数:对象销毁时自动调用

函数名前加 ~不能重载无参数

class Animal {
public:
    Animal() { std::cout << "构造函数执行\n"; }
    ~Animal() { std::cout << "析构函数执行\n"; }
};

5. this 指针

  • 指向调用成员函数的当前对象
  • 常用于成员赋值、链式调用
class Box {
    int width;
public:
    Box(int width) {
        this->width = width;
    }
};

6. 成员函数在类外定义(使用作用域符号 ::

class Car {
public:
    void start();
};

void Car::start() {
    std::cout << "Car started" << std::endl;
}

7. 成员初始化列表

构造函数中推荐用初始化列表设置成员变量(尤其是const或引用)。

class Point {
    int x, y;
public:
    Point(int a, int b) : x(a), y(b) {}
};

8. 静态成员变量与函数(static)

  • 所有对象共享一个变量
  • 静态函数只能访问静态成员
class Counter {
public:
    static int count;
    Counter() { count++; }
    static void printCount() {
        std::cout << "Count = " << count << std::endl;
    }
};
int Counter::count = 0;  // 静态变量初始化

9. 对象的组合(类中包含类)

class Engine {
public:
    void run() { std::cout << "Engine running\n"; }
};

class Car {
    Engine e;
public:
    void drive() {
        e.run();
        std::cout << "Car driving\n";
    }
};

10. 类的继承(Inheritance)

子类继承父类的属性和方法。

class Animal {
public:
    void eat() { std::cout << "Eating\n"; }
};

class Dog : public Animal {
public:
    void bark() { std::cout << "Barking\n"; }
};

📝 注意继承方式:

继承方式 公有成员 保护成员 私有成员
public 保持原样 保持保护 不可访问
protected 变保护 保持保护 不可访问
private 变私有 变私有 不可访问

11. 多态(Polymorphism)

🔹 虚函数实现运行时多态:

class Base {
public:
    virtual void speak() {
        std::cout << "Base speak\n";
    }
};

class Child : public Base {
public:
    void speak() override {
        std::cout << "Child speak\n";
    }
};

🔹 使用指针调用

Base* b = new Child();
b->speak();  // 输出 Child speak(虚函数决定调用子类)

12. const 成员函数

在函数声明末尾加 const 表示函数不会修改成员变量。

class Student {
    int id;
public:
    int getId() const {
        return id;  // 不能修改成员变量
    }
};

13. 内联函数(inline)

小函数可加 inline 提高效率(建议只用于简单函数)。

class Math {
public:
    inline int square(int x) {
        return x * x;
    }
};

14. 类的分离式编写(.h + .cpp)

📁 Person.h

#pragma once
class Person {
public:
    Person(const char* n);
    void sayHello();
private:
    const char* name;
};

📁 Person.cpp

#include "Person.h"
#include <iostream>

Person::Person(const char* n) : name(n) {}
void Person::sayHello() {
    std::cout << "Hello, I am " << name << std::endl;
}

📁 main.cpp

#include "Person.h"
int main() {
    Person p("Alice");
    p.sayHello();
    return 0;
}

15. 总结:C++ 类编写常见套路

✅ 成员变量私有化,公有函数访问
✅ 构造+析构函数成对定义
✅ 使用初始化列表设置成员变量
✅ 建议将类定义分离为 .h.cpp
✅ 使用 const、inline、static 提高安全性与效率
✅ 利用继承和虚函数实现代码复用与多态


网站公告

今日签到

点亮在社区的每一天
去签到