当前位置: 首页 > news >正文

C++类和对象--初阶

C++类和对象—初阶

01. 面向对象与面向过程深度对比

面向过程:以过程为中心,关心问题解决的步骤。执行效率高,适合简单问题,内存占用小。但是代码复杂性高,维护成本高。
线性流程:点餐 → 烹饪 → 上菜 → 结账

主函数
函数a
子函数b
子函数c

面向对象:将一个事物拆成多个对象,以对象为中心,关心对象间的交互。代码复用和扩展方便适用于团队开发。
交互对象:顾客、服务员、厨师、收银员,通过消息传递协作

对象A
对象B
对象C
对象D

02. 类的定义与对象创建

类由 class 关键字修饰,有public,protected,private三类访问修饰符,类定义必须以分号结束。类主体包含:

成员变量:存储对象状态(private修饰变量建议_标识,避免与类中函数变量名重名误解)。

成员函数:定义对象行为动作

代码示例

class ClassName {  // class 关键字声明类
// 类成员组成
private:          // 私有访问修饰符int _age;  // 成员变量(属性)char _address;  
public:void showInfo() {  // 成员函数// 函数实现cout <<_age<<"---"<<_address << endl:}...
};  // 分号不可省略
//类的创建
ClassName zhangsan;

**封装:**将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来 和对象进行交互。


03. 类的作用域

类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用( :: )作用域操作符指明成员属于哪个类域。

public:void ClassName::showInfo() {  // 成员函数// 函数实现cout <<_age<<"---"<<_address << endl:}

04. 类的实例化

类比类(Class)对象(Object)
建筑图纸房屋设计蓝图按图纸建造的实际房屋
数据类型int(类型定义)int a = 5(具体变量)

做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设
计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象
才能实际存储数据,占用物理空间

05. 类的对象大小的计算

  1. 第一个成员在与结构体偏移量为0的地址处。
  2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
    注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。
    VS中默认的对齐数为8
  3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。
  4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整
    体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

类中只保存成员变量,成员函数存放在公共的代码段

在这里插入图片描述

06. this制作

在 C++ 中,this 指针是一个隐含的、由编译器自动管理的指针,它指向当前对象的地址。

定义一个date类:

class Date{ 
public:void Init(int year, int month, int day){_year = year;_month = month;_day = day;}void Print(){cout <<_year<< "-" <<_month << "-"<< _day <<endl;}
private:int _year;     // 年int _month;    // 月    int _day;      // 日
};
int main(){Date d1, d2;d1.Init(2022,1,11);d2.Init(2022, 1, 12);d1.Print();d2.Print();return 0;
}

Date类中有两个成员函数,函数体中没有关于不同对象的区分。C++中通过编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

this指针的特性

  1. this指针的类型:类类型* const,即成员函数中,不能给this指针赋值

  2. 只能在“成员函数”的内部使用

  3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象中不存储this指针

  4. this指针是“成员函数”第一个隐含的指针形参(存在栈上边),一般情况由编译器通过ecx寄存器自动传递,不需要用户传递

  5. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象中不存储this指针

  6. this指针是“成员函数”第一个隐含的指针形参(存在栈上边),一般情况由编译器通过ecx寄存器自动传递,不需要用户传递

相关文章:

  • C++ string初始化、string赋值操作、string拼接操作
  • 嵌入式硬件篇---超声波|PID
  • 三维空间中的组织行为映射:MATLAB 数据插值可视化技术
  • 实战项目6(09)
  • 企业内训|智能调控系统算法与优化——某汽车厂商
  • JVM内存结构有哪些?HashMap和HashTable的区别?
  • NX989NY104美光科技芯片NY109NY113
  • mem0跟Memgraph交互
  • 当 Manus AI 遇上 OpenAI Operator,谁能更胜一筹?
  • 大模型应用中常说的Rerank是什么技术?
  • 大模型核心基础简介
  • GIF图像技术介绍
  • MacOS Python3安装
  • Java在人工智能中的应用:机器学习与深度学习技术探讨
  • 剪板机结构设计:关键技术分析与优化策略
  • python 实现文件批量重命名
  • 网络IP分片
  • JVM——Java字节码基础
  • Web 实时通信技术:WebSocket 与 Server-Sent Events (SSE) 深入解析
  • SpringCloud Gateway知识点整理和全局过滤器实现
  • 江西省市场监管局原局长谢来发被双开:违规接受旅游活动安排
  • 最高降价三成,苹果中国iPhone开启大促销,能拉动多少销量?
  • 60余年产业积累,“江苏绿心”金湖炼就“超级石油工具箱”
  • 铁肩担道义,历史鉴未来——中共中央政治局委员、外交部长王毅谈习近平主席对俄罗斯进行国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典
  • 卢正已任上海市司法局党委委员、副局长
  • 国家主席习近平会见斯洛伐克总理菲佐