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