C++ 类
学习class · 难度:进阶 · +15XP
C++ 类与对象
类(class)是 C++ 面向对象编程的核心。类是一种用户自定义的数据类型,它将数据(属性)和操作数据的函数(方法)封装在一起。通过类创建的对象可以模拟现实世界中的实体,让程序的结构更加清晰、自然。C++ 的类同时支持栈上分配和堆上分配,给予开发者极大的灵活性。
类的定义与实例化
类的定义使用 class 关键字,默认情况下成员是 private 的(与 struct 相反)。通常将属性设为私有,通过公共方法(getter/setter)访问,这是封装的核心思想。
#include <iostream>
#include <string>
using namespace std;
class Student {
private:
string name;
int age;
double score;
public:
// 构造函数
Student(string n, int a, double s)
: name(n), age(a), score(s) {}
// 成员函数(方法)
void display() {
cout << "姓名: " << name
<< ", 年龄: " << age
<< ", 分数: " << score << endl;
}
// Getter/Setter
string getName() const { return name; }
void setScore(double s) { score = s; }
double getScore() const { return score; }
};
int main() {
// 栈上创建对象
Student s1("张三", 18, 92.5);
s1.display();
// 堆上创建对象
Student* s2 = new Student("李四", 20, 88.0);
s2->display(); // 指针用 -> 访问成员
delete s2; // 手动释放内存
return 0;
}
构造函数与析构函数
| 函数类型 | 调用时机 | 用途 |
|---|---|---|
| 默认构造函数 | 创建对象时(无参数) | 初始化成员为默认值 |
| 带参数构造函数 | 创建对象并传入参数 | 用指定值初始化成员 |
| 拷贝构造函数 | 用一个对象初始化另一个 | 深拷贝 / 浅拷贝控制 |
| 析构函数 | 对象生命周期结束时 | 释放资源(内存、文件句柄等) |
| 移动构造函数 | C++11,从临时对象转移资源 | 避免不必要的拷贝,提升性能 |
class MyArray {
private:
int* data;
int size;
public:
// 构造函数
MyArray(int s) : size(s) {
data = new int[size];
cout << "分配 " << size << " 个整数空间" << endl;
}
// 析构函数
~MyArray() {
delete[] data;
cout << "释放内存" << endl;
}
};
this 指针与 const 成员函数
每个非静态成员函数都隐式包含一个 this 指针,指向调用该函数的对象。在成员函数末尾添加 const 关键字可以将该函数声明为常量成员函数,保证它不会修改任何成员变量的值。
- 定义一个
Rectangle类,包含 width、height 属性,以及计算面积和周长的成员方法 - 为
Rectangle添加默认构造函数、带参数构造函数和拷贝构造函数 - 创建
BankAccount类,包含余额、账号属性,实现存款、取款方法(取款需检查余额) - 在
BankAccount中添加静态成员变量totalAccounts,统计一共创建了多少个账户 - 使用初始化列表语法重写所有构造函数,对比初始化列表与构造函数体内赋值的区别