1. C++面向对象编程基础
C++作为一门支持面向对象编程的语言,其核心概念就是类和对象。理解类和对象的关系,就像理解建筑图纸和实际建筑的关系一样。图纸定义了建筑的结构和功能(类),而实际建造出来的每栋楼就是具体的实例(对象)。
在C++中,类是一种用户自定义的数据类型,它封装了数据(成员变量)和操作这些数据的方法(成员函数)。这种封装特性就像是一个黑盒子,外部只能通过定义好的接口与对象交互,而不需要知道内部的具体实现细节。
提示:面向对象编程的三大特性是封装、继承和多态,其中封装是最基础也是最重要的特性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 类的定义与实现
2.1 类的基本结构
一个典型的C++类定义包含以下几个部分:
cpp复制class MyClass {
private:
// 私有成员,只能在类内部访问
int privateVar;
protected:
// 保护成员,可以在派生类中访问
float protectedVar;
public:
// 公有成员,可以在任何地方访问
string publicVar;
// 构造函数
MyClass() {
privateVar = 0;
protectedVar = 0.0f;
publicVar = "default";
}
// 成员函数
void display() {
cout << "Values: " << privateVar << ", "
<< protectedVar << ", " << publicVar << endl;
}
};
访问控制修饰符(private、protected、public)决定了成员的可见性。良好的类设计应该遵循"信息隐藏"原则,将数据成员设为private,只通过public方法提供访问接口。
2.2 构造函数与析构函数
构造函数在对象创建时自动调用,用于初始化对象的状态。C++支持多种构造函数形式:
cpp复制class Person {
private:
string name;
int age;
public:
// 默认构造函数
Person() : name("Unknown"), age(0) {}
// 带参数的构造函数
Person(string n, int a) : name(n), age(a) {}
// 拷贝构造函数
Person(const Person &other) {
name = other.name;
age = other.age;
}
// 析构函数
~Person() {
cout << "Person object destroyed" << endl;
}
};
析构函数在对象生命周期结束时自动调用,用于释放资源。对于管理动态内存或其他系统资源的类,正确实现析构函数至关重要。
注意:如果类中有指针成员并分配了动态内存,必须实现拷贝构造函数和赋值运算符,避免浅拷贝问题。
3. 类的进阶特性
3.1 静态成员
静态成员属于类本身而非特定对象,所有对象共享同一份静态成员:
cpp复制class Counter {
private:
static int count; // 静态成员变量声明
public:
Counter() { count++; }
~Counter() { count--; }
static int getCount() { // 静态成员函数
return count;
}
};
int Counter::count = 0; // 静态成员变量定义
静态成员函数只能访问静态成员变量,不能访问非静态成员。它们通常用于实现与类相关但不依赖于特定对象实例的功能。
3.2 友元函数与友元类
友元机制打破了封装性,允许特定函数或类访问私有成员:
cpp复制class Box {
private:
double width;
public:
friend void printWidth(Box box); // 友元函数
friend class BoxPrinter; // 友元类
};
void printWidth(Box box) {
