如何轻松打造个性化数字伴侣:BongoCat桌面萌宠完全指南
2026/1/22 0:56:43
C++类的本质是将"数据(属性)"和"操作的方法(函数)"封装成一个整体 a.访问修饰符-private:私有成员(默认),仅类内部可访问,用于封装核心数据,避免外部随意修改-public:公有成员,类外部可访问,用于提供对外操作接口(如drive()、setSpeed())-protected:保护成员,仅类内部和子类可访问(继承时用)b.构造/析构函数-构造函数:对象"出生"时初始化数据,无返回值、名字和类名一致-析构函数:对象"死亡"时清理资源(如动态内存),格式为"~类名()",无参数、无返回值#include <iostream>#include <string>usingnamespacestd;// 1. 定义类:class关键字 + 类名(首字母通常大写)classCar{// 2. 访问修饰符:控制成员的访问权限(核心)private:// 私有成员:仅类内部可访问(封装的核心,保护数据)stringbrand;// 成员变量(属性):汽车品牌intspeed;// 成员变量(属性):行驶速度public:// 公有成员:类外部可访问(提供对外接口)// 3. 构造函数:创建对象时自动调用,用于初始化成员变量// 特点:与类名相同、无返回值、可重载Car(stringb,ints):brand(b),speed(s){// 初始化列表(更高效的写法)cout<<"构造函数调用:"<<brand<<"已创建"<<endl;}// 4. 析构函数:对象销毁时自动调用,用于释放资源(如内存、文件句柄)// 特点:~+类名、无返回值、无参数、仅一个~Car(){cout<<"析构函数调用:"<<brand<<"已销毁"<<endl;}// 5. 成员函数(方法):操作成员变量的函数// 行为1:行驶voiddrive(){cout<<brand<<"正在以"<<speed<<"km/h行驶"<<endl;}// 行为2:修改速度(封装体现:通过接口控制私有属性的修改规则)voidsetSpeed(intnewSpeed){// 合法性检查:避免设置不合理的速度if(newSpeed>=0&&newSpeed<=200){speed=newSpeed;}else{cout<<"错误:速度必须在0-200之间!"<<endl;}}// 行为3:获取当前速度(封装体现:对外暴露只读接口)intgetSpeed(){returnspeed;}};// 2. 使用类(实例化对象)intmain(){// 创建对象(实例化类):自动调用构造函数CarmyCar("特斯拉",80);// 调用公有成员函数(访问类的行为)myCar.drive();// 输出:特斯拉正在以80km/h行驶// 修改私有属性(必须通过公有方法)myCar.setSpeed(120);myCar.drive();// 输出:特斯拉正在以120km/h行驶// 尝试设置非法速度(触发合法性检查)myCar.setSpeed(250);// 输出:错误:速度必须在0-200之间!// 获取私有属性(通过公有方法)cout<<"当前速度:"<<myCar.getSpeed()<<endl;// 输出:当前速度:120// 程序结束时,对象销毁,自动调用析构函数return0;}C++中,结构体和类在本质上几乎是等价的(唯一核心区别是默认访问权限),它们的实例(对象)存在哪里,只看你怎么创建:a.栈上创建:直接定义变量(自动存储,函数/代码块结束后自动释放)b.堆上创建:用new关键字动态分配(手动分配,需delete释放,否则内存泄漏)