4.1类与对象基础

107 阅读3分钟

类与对象基础:从蓝图到实体

一、类定义与对象实例化

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指向调用该函数的对象实例

  • 主要用于:

    1. 解决命名冲突
    2. 链式方法调用
    3. 返回对象自身
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%
}

五、总结与提升

课后思考题

  1. 如果忘记写访问修饰符,默认的访问权限是什么?
  2. 如何实现多个对象共享同一份数据?

实践建议

  1. 创建一个Car类,包含品牌、速度等属性
  2. 实现加速、刹车等方法
  3. 添加里程统计功能,验证不同对象的独立性

这篇文章通过分层讲解配合代码示例,覆盖了类与对象的核心知识点,适合作为C++面向对象编程的入门教程。建议读者实际运行示例代码并通过调试器观察对象的内存结构,这将加深对概念的理解。