当前位置: 首页 > 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寄存器自动传递,不需要用户传递

http://www.xdnf.cn/news/393733.html

相关文章:

  • 英伟达微调qwen2.5-32B模型,开源推理模型:OpenCodeReasoning-Nemotron-32B
  • 关于 js:6. 网络与加密模块
  • JUC并发编程(上)
  • suricata之规则去重
  • 力扣刷题(第二十三天)
  • LLMs之MCP:2025年5月2日,Anthropic 宣布 Claude 重大更新:集成功能上线,研究能力大幅提升
  • 关于在使用getOutputStream()方法后续没有用到write()
  • 普通IT的股票交易成长史--20250511 美元与美股强相关性
  • 微服务架构中如何保证服务间通讯的安全
  • 实践官方的 A2A SDK Python
  • 理解c++中explicit关键字的作用
  • Ai学习之LLM
  • python-Pandas库详细教程
  • C++蓝桥杯真题(题目+解析+流程图)(特殊运算符+四叶玫瑰数+质因数的个数+最大的矩形纸片+数字游戏+活动人数)
  • ADC接口
  • 职场心得总结(1)-如何获得晋升
  • Java快速上手之实验七
  • 2025-05-11 Unity 网络基础11——UnityWebRequest 使用
  • 【数据结构】前言
  • JVM内存结构有哪些?HashMap和HashTable的区别?
  • 编程技能:字符串函数02,strcpy
  • 解决SSH连接华为云服务器ESC经常性断连问题
  • 数据结构实验9.1:静态查找表的基本操作
  • C++:template(函数模板)
  • GitLab搭建与使用(SSH和Docker)两种方式
  • [学习]RTKLib详解:convkml.c、convrnx.c与geoid.c
  • HTTP 错误状态码以及常用解决方案
  • C++进阶--使用红黑树封装map和set
  • 原型链与继承机制:继承背后的秘密
  • Baklib内容中台的核心架构是什么?