C++面向对象真没那么难:类与对象(上篇)

目录

C++面向对象真没那么难:类与对象(上篇)

一、类:现实世界的“设计图纸”

1.1 定义类就像写手机配置单

二、对象:图纸造出来的“真机”

2.1 创建对象就像生产手机

三、访问控制:手机的“安全锁”

四、构造函数:手机的“出厂设置”

4.1 自动执行的初始化

4.2 析构函数:自动清理收尾

五、this指针:对象的“身份证”

六、实战:用类实现咖啡点单系统

未完持续...(关注我,宝子,C++学习带你飞起来!!!


C++面向对象真没那么难:类与对象(上篇)

​类就像手机设计图,对象就是你手里的iPhone​
这篇没有复杂理论,只有小白秒懂的生活例子 + 手把手代码实操,包你30分钟摸透面向对象第一关!

一、类:现实世界的“设计图纸”

想象你要造手机:

  • ​设计图(类)​​:规定手机要有屏幕/电池/摄像头(属性),能打电话/拍照(功能)
  • ​真机(对象)​​:按照图纸造出来的iPhone14(具体存在的事物)

1.1 定义类就像写手机配置单

// 声明一个“手机”类
class Phone {
public:    // 公共区域(外人能用的功能)
    // 成员变量(属性)
    float screenSize;  // 屏幕尺寸
    int battery;        // 电池容量
    
    // 成员函数(功能)
    void call(string number) {
        cout << "正在拨打:" << number << endl;
    }
    
    void takePhoto() {
        cout << "咔嚓!照片已保存" << endl;
    }
};  // 注意分号不能丢!

​关键点解释​​:

  • public:就像手机外壳的按钮,​​外部可以直接访问​
  • 成员变量:描述特征的​​数据​​(如屏幕尺寸6.1英寸)
  • 成员函数:描述行为的​​功能​​(拍照/打电话)

💡 对比现实:所有iPhone14都按照同一张图纸生产 → 一个类能创建无数对象!


二、对象:图纸造出来的“真机”

2.1 创建对象就像生产手机

int main() {
    // 生产线1:造一台iPhone14(栈上创建)
    Phone iphone14;  
    iphone14.screenSize = 6.1;  // 装6.1寸屏
    iphone14.battery = 3279;    // 装3279mAh电池
    
    // 生产线2:造一台Mate60(堆上创建)
    Phone* mate60 = new Phone(); 
    mate60->screenSize = 6.7;   // 箭头访问堆对象
    mate60->battery = 4700;
    
    delete mate60;  // 不用了记得拆解回收!
}

​两种创建方式对比​​:

​创建方式​特点生命周期访问方式
栈对象Phone myPhone;自动销毁点运算符.
堆对象new Phone()需手动delete箭头->

⚠️ ​​新手坑​​:忘写delete → 内存泄漏(相当于废旧手机堆满仓库)


三、访问控制:手机的“安全锁”

类用三种权限保护内部数据:

class BankAccount {
private:   // 保险箱区域(仅内部能开)
    string password = "888888";  // 密码藏这里
    
public:    // 营业大厅(对外开放)
    double balance = 1000.0;  // 余额
    
    // 唯一修改密码的通道
    bool changePwd(string oldPwd, string newPwd) {
        if (oldPwd == password) {
            password = newPwd;
            return true;
        }
        return false;
    }
};

​权限对照表​​:

关键词谁可以访问现实类比
private仅类内部手机主板(不能乱碰)
public所有代码手机充电口(随便用)
protected类内和子类(中篇讲)家族继承的金库钥匙

✅ ​​封装的好处​​:防止你手滑把password改成123456 → 账户更安全!


四、构造函数:手机的“出厂设置”

4.1 自动执行的初始化

每次创建对象时,​​构造函数自动调用​​(不用手动触发):

class Student {
private:
    string name;
    int id;
    
public:
    // 构造函数(名字和类相同)
    Student(string stuName, int stuId) {
        name = stuName;  // 给新对象贴名字
        id = stuId;       // 分配学号
        cout << name << "同学已入学" << endl;
    }
};

int main() {
    Student stu1("张三", 20230001); // 创建即初始化
    // 输出:张三同学已入学
}

4.2 析构函数:自动清理收尾

对象销毁时​​自动执行​​(比如关闭文件/释放内存):

class FileHandler {
public:
    // 构造函数打开文件
    FileHandler(string filename) {
        cout << "打开文件:" << filename << endl;
    }
    
    // 析构函数关闭文件(~开头)
    ~FileHandler() {
        cout << "文件已关闭" << endl; 
    }
};

int main() {
    FileHandler myFile("data.txt"); 
    // 程序结束自动输出:文件已关闭
}

🔥 ​​新手技巧​​:构造函数初始化 > 析构函数收尾,形成完美闭环!


五、this指针:对象的“身份证”

当多个对象调用同一函数时,this帮函数分清谁是谁:

class Cup {
public:
    string color;
    
    // this指向当前对象
    void showOwner() {
        cout << "这个" << color << "杯子是我的!" << endl;
        cout << "我的内存地址:" << this << endl;
    }
};

int main() {
    Cup blueCup, redCup;
    blueCup.color = "蓝色";
    redCup.color = "红色";
    
    blueCup.showOwner();  // 输出:这个蓝色杯子是我的!
    redCup.showOwner();   // 输出:这个红色杯子是我的!
    
    // 输出不同内存地址 → 证明this不同
}

​this的日常用途​​:

  1. ​区分重名变量​
void setName(string name) {
    this->name = name; // this->name指成员变量
}                      // name指参数
  1. ​返回对象自身​​(链式调用)
Cup& setColor(string color) {
    this->color = color;
    return *this; // 返回自己(下篇详解)
}
// 可连续调用:myCup.setColor("蓝").setSize(10);

六、实战:用类实现咖啡点单系统

#include <iostream>
using namespace std;

class Coffee {
private:
    string name;
    float price;
    
public:
    // 构造函数初始化
    Coffee(string n, float p) : name(n), price(p) {}
    
    // 显示订单
    void showOrder() {
        cout << "您点了:" << name 
             << ",价格:" << price << "元" << endl;
    }
};

int main() {
    Coffee latte("拿铁", 28.5);  // 创建拿铁对象
    Coffee mocha("摩卡", 32.0); // 创建摩卡对象
    
    latte.showOrder(); // 输出:您点了拿铁,价格28.5元
    mocha.showOrder(); // 输出:您点了摩卡,价格32元
}

​运行效果​​:

您点了:拿铁,价格:28.5元  
您点了:摩卡,价格:32元

未完持续...(关注我,宝子,C++学习带你飞起来!!!)

现在只需记住:​​类是图纸,对象是实物​
动手写个Student类试试看(带姓名/学号/显示功能),遇到卡壳随时回看~ 我们中篇见! 👋

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值