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

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 提高安全性与效率
✅ 利用继承和虚函数实现代码复用与多态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值