类与对象基础:从蓝图到实体
一、类定义与对象实例化
1.1 类的定义
类(Class)是C++面向对象编程的核心概念,可以理解为创建对象的蓝图。就像建筑图纸决定了房子的结构和功能,类决定了对象的属性和行为。
// 示例:学生类的定义
class Student {
public: // 访问控制(下节详解)
// 成员变量(属性)
string name;
int age;
// 成员函数(方法)
void introduce() {
cout << "我叫" << name << ",今年" << age << "岁" << endl;
}
}; // 注意结尾的分号!
📝 新手常见误区:
- 忘记类定义结尾的分号
- 混淆类声明(头文件)与类实现(源文件)
1.2 对象实例化
根据类创建具体对象的过程称为实例化,就像根据设计图建造真实的房屋:
// 实例化方式对比
Student s1; // 栈上创建
Student* s2 = new Student(); // 堆上创建
// 访问成员
s1.name = "张三";
s1.age = 18;
s1.introduce();
// 输出结果:
// 我叫张三,今年18岁
二、访问控制:权限管理三剑客
2.1 访问修饰符
修饰符 | 类内访问 | 派生类访问 | 外部访问 |
---|---|---|---|
public | ✔ | ✔ | ✔ |
protected | ✔ | ✔ | ✘ |
private | ✔ | ✘ | ✘ |
2.2 实践示例
class BankAccount {
private:
double balance; // 私有:只能通过指定方法访问
public:
void deposit(double amount) {
if (amount > 0) balance += amount;
}
double getBalance() {
return balance;
}
};
int main() {
BankAccount acc;
// acc.balance = 1000; // 错误!私有成员不可直接访问
acc.deposit(500);
cout << "当前余额:" << acc.getBalance(); // 输出:500
}
🔐 设计原则:
- 将数据成员设为
private
保证数据安全 - 通过
public
方法提供可控的访问接口
三、成员函数与this指针
3.1 成员函数
成员函数是定义在类内部的函数,用于操作对象的数据成员:
class Rectangle {
private:
int width, height;
public:
void setSize(int w, int h) {
// 通过this指针访问成员变量
this->width = w;
this->height = h;
}
int area() {
return width * height;
}
};
3.2 this指针揭秘
-
每个成员函数都隐式包含
this
指针 -
this
指向调用该函数的对象实例 -
主要用于:
- 解决命名冲突
- 链式方法调用
- 返回对象自身
void setSize(int width, int height) {
this->width = width; // 明确指定成员变量
this->height = height;
}
💡 类比理解: this
就像快递单上的"收件人地址",告诉系统应该把包裹(数据)送到哪个具体的房子(对象)
四、综合应用案例
#include <iostream>
using namespace std;
class Smartphone {
private:
string model;
int battery;
public:
Smartphone(string m) : model(m), battery(100) {}
void useApp(int minutes) {
battery -= minutes/2;
if(battery < 0) battery = 0;
}
void charge() {
battery = 100;
}
void showStatus() {
cout << model << " 剩余电量:" << battery << "%\n";
}
};
int main() {
Smartphone myPhone("Pixel6");
myPhone.useApp(60); // 使用60分钟
myPhone.showStatus(); // 输出:Pixel6 剩余电量:70%
myPhone.charge();
myPhone.showStatus(); // 输出:Pixel6 剩余电量:100%
}
五、总结与提升
课后思考题:
- 如果忘记写访问修饰符,默认的访问权限是什么?
- 如何实现多个对象共享同一份数据?
实践建议:
- 创建一个
Car
类,包含品牌、速度等属性 - 实现加速、刹车等方法
- 添加里程统计功能,验证不同对象的独立性
这篇文章通过分层讲解配合代码示例,覆盖了类与对象的核心知识点,适合作为C++面向对象编程的入门教程。建议读者实际运行示例代码并通过调试器观察对象的内存结构,这将加深对概念的理解。