1. C++面向对象编程基础
在C++的世界里,类和对象是构建复杂系统的基石。作为一名有十年C++开发经验的工程师,我见过太多初学者因为对类和对象的理解不够深入而写出难以维护的代码。今天我们就来彻底拆解这个看似基础却极其重要的概念。
C++的类(class)本质上是一种用户自定义的数据类型,它封装了数据(成员变量)和操作这些数据的方法(成员函数)。而对象(object)则是类的具体实例,就像"汽车设计图"和"具体某辆汽车"的关系。这种抽象方式让代码更接近现实世界的思维方式。
重要提示:C++中struct和class的唯一区别是默认访问权限不同(struct默认public,class默认private),除此之外它们的功能完全一致。这是很多面试常考的知识点。
2. 类的定义与实现
2.1 基本类定义语法
一个典型的类定义包含以下部分:
cpp复制class Student {
private: // 访问修饰符
// 成员变量(属性)
std::string name;
int age;
float gpa;
public:
// 成员函数(方法)
void setName(const std::string& newName) {
name = newName;
}
void printInfo() const {
std::cout << "Name: " << name
<< ", Age: " << age
<< ", GPA: " << gpa << std::endl;
}
};
这里有几个关键点需要注意:
- 访问修饰符(private/public/protected)控制成员的可见性
- 成员变量通常设为private以实现封装
- 成员函数可以操作这些私有变量
- const成员函数承诺不修改对象状态
2.2 构造函数与初始化
构造函数是类中特殊的成员函数,在创建对象时自动调用。现代C++推荐使用初始化列表语法:
cpp复制class Student {
public:
// 构造函数
Student(const std::string& name, int age, float gpa)
: name(name), age(age), gpa(gpa) {} // 初始化列表
// 委托构造函数(C++11)
Student() : Student("Unknown", 0, 0.0f) {}
private:
std::string name;
int age;
float gpa;
};
初始化列表不仅更高效(避免先默认初始化再赋值),而且对const成员和引用成员是必须的。C++11引入的委托构造函数可以让构造函数复用代码。
3. 对象生命周期管理
3.1 对象创建与销毁
对象可以在栈上或堆上创建:
cpp复制// 栈上对象(自动管理生命周期)
Student s1("Alic
