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

【C++】类和对象( 类的定义、实例化、 this指针、 C++和C语言实现Stack对比)

小编主页详情-请点击小编gitee代码仓库-请点击本文主要介绍了类和对象 类的定义、实例化、 this指针、 C和C语言实现Stack对比内容全由作者原创无AI并带有配图帮助博友们更好的理解点个关注不迷路下面进入正文~~目录1. 类的定义1.1 类定义格式1.2 访问限定符1.3 类域2. 实例化2.1 实例化概念2.2 对象大小3. this指针4. C和C语言实现Stack对比结语1.类的定义1.1类定义格式class为定义类的关键字Stack为类的名字{}中为类的主体注意类定义结束时后面分号不能省略。类体中内容称为类的成员类中的变量称为类的属性或成员变量类中的函数称为类的方法或者成员函数。为了区分成员变量一般习惯上成员变量会加一个特殊标识如成员变量前面或者后面加_或者m开头注意C中这个并不是强制的只是一些惯例。C中struct也可以定义类C兼容C中struct的用法同时struct升级成了类明显的变化是struct中可以定义函数一般情况下我们还是推荐用class定义类。定义在类里面的成员函数默认为inline。#includeiostream #includeassert.h using namespace std; class Stack { public: // 成员函数 void Init(int n 4) { array (int*)malloc(sizeof(int) * n); if (nullptr array) { perror(malloc申请空间失败); return; } capacity n; top 0; } void Push(int x) { // ...扩容 array[top] x; } int Top() { assert(top 0); return array[top - 1]; } void Destroy() { free(array); array nullptr; top capacity 0; } private: // 成员变量 int* array; size_t capacity; size_t top; }; // 分号不能省略 int main() { Stack st; st.Init(); st.Push(1); st.Push(2); cout st.Top() endl; st.Destroy(); return 0; } class Date { public: void Init(int year, int month, int day) { _year year; _month month; _day day; } private: // 为了区分成员变量一般习惯上成员变量 // 会加一个特殊标识如_ 或者 m开头 int _year; // year_ m_year int _month; int _day; }; int main() { Date d; d.Init(2024, 3, 31); return 0; } #includeiostream using namespace std; // C升级struct升级成了类 // 1、类里面可以定义函数 // 2、struct名称就可以代表类型 // C兼容C中struct的用法 typedef struct ListNodeC { struct ListNodeC* next; int val; }LTNode; // 不再需要typedefListNodeCPP就可以代表类型 struct ListNodeCPP { void Init(int x) { next nullptr; val x; } ListNodeCPP* next; int val; }; int main() { return 0; }1.2访问限定符C一种实现封装的方式用类将对象的属性与方法结合在一块让对象更加完善通过访问权限选择性的将其接口提供给外部的用户使用。public修饰的成员在类外可以直接被访问protected和private修饰的成员在类外不能直接被访问protected和private是一样的以后继承章节才能体现出他们的区别。访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止如果后面没有访问限定符作用域就到}即类结束。class定义成员没有被访问限定符修饰时默认为privatestruct默认为public。一般成员变量都会被限制为private/protected需要给别人使用的成员函数会放为public。1.3类域类定义了一个新的作用域类的所有成员都在类的作用域中在类体外定义成员时需要使用::作用域操作符指明成员属于哪个类域。类域影响的是编译的查找规则下面程序中Init如果不指定类域Stack那么编译器就把Init当成全局函数那么编译时找不到array等成员的声明/定义在哪里就会报错。指定类域Stack就是知道Init是成员函数当前域找不到的array等成员就会到类域中去查找。#includeiostream using namespace std; class Stack { public: // 成员函数 void Init(int n 4); private: // 成员变量 int* array; size_t capacity; size_t top; }; // 声明和定义分离需要指定类域 void Stack::Init(int n) { array (int*)malloc(sizeof(int) * n); if (nullptr array) { perror(malloc申请空间失败); return; } capacity n; top 0; } int main() { Stack st; st.Init(); return 0; }2.实例化2.1实例化概念用类类型在物理内存中创建对象的过程称为类实例化出对象。类是对象进行一种抽象描述是模型一样的东西限定了类有哪些成员变量这些成员变量只是声明没有分配空间用类实例化出对象时才会分配空间。一个类可以实例化出多个对象实例化出的对象占用实际的物理空间存储类成员变量。打个比方类实例化出对象就像现实中使用建筑设计图建造出房子类就像是设计图设计图规划了有多少个房间房间大小功能等但是并没有实体的建筑存在也不能住人用设计图修建出房子房子才能住人。同样类就像设计图一样不能存储数据实例化出的对象分配物理内存存储数据。#includeiostream using namespace std; 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 Date d1; Date d2; d1.Init(2024, 3, 31); d1.Print(); d2.Init(2024, 7, 5); d2.Print(); return 0; }2.2对象大小分析一下类对象中哪些成员呢类实例化出的每个对象都有独立的数据空间所以对象中肯定包含成员变量那么成员函数是否包含呢首先函数被编译后是一段指令对象中没办法存储这些指令存储在一个单独的区域代码段那么对象中非要存储的话只能是成员函数的指针。再分析一下对象中是否有存储指针的必要呢Date实例化d1和d2两个对象d1和d2都有各自独立的成员变量_year/_month/_day存储各自的数据但是d1和d2的成员函数Init/Print指针却是一样的存储在对象中就浪费了。如果用Date实例化100个对象那么成员函数指针就重复存储100次太浪费了。这里需要再额外哆嗦一下其实函数指针是不需要存储的函数指针是一个地址调用函数被编译成汇编指令[call 地址]其实编译器在编译链接时就要找到函数的地址不是在运行时找只有动态多态是在运行时找就需要存储函数地址这个我们以后会讲解。C规定类实例化的对象也要符合内存对齐的规则。内存对齐规则• 第一个成员在与结构体偏移量为0的地址处。• 其他成员变量要对齐到某个数字对齐数的整数倍的地址处。• 注意对齐数 编译器默认的一个对齐数 与 该成员大小的较小值。• VS中默认的对齐数为8• 结构体总大小为最大对齐数所有变量类型最大者与默认对齐参数取最小的整数倍。• 如果嵌套了结构体的情况嵌套的结构体对齐到自己的最大对齐数的整数倍处结构体的整体大小就是所有最大对齐数含嵌套结构体的对齐数的整数倍。#includeiostream using namespace std; // 计算一下A/B/C实例化的对象是多大 class A { public: void Print() { cout _ch endl; } private: char _ch; int _i; }; class B { public: void Print() { //... } }; class C { }; int main() { A a; B b; C c; cout sizeof(a) endl; cout sizeof(b) endl; cout sizeof(c) endl; return 0; }上面的程序运行后我们看到没有成员变量的B和C类对象的大小是1为什么没有成员变量还要给1个字节呢因为如果一个字节都不给怎么表示对象存在过呢所以这里给1字节纯粹是为了占位标识对象存在。3.this指针Date类中有 Init 与 Print 两个成员函数函数体中没有关于不同对象的区分那当d1调用Init和Print函数时该函数是如何知道应该访问的是d1对象还是d2对象呢那么这里就要看到C给了一个隐含的this指针解决这里的问题。编译器编译后类的成员函数默认都会在形参第一个位置增加一个当前类类型的指针叫做this指针。比如Date类的Init的真实原型为void Init(Date* const this, int year, int month, int day)类的成员函数中访问成员变量本质都是通过this指针访问的如Init函数中给_year赋值this-_year year;C规定不能在实参和形参的位置显示的写this指针编译时编译器会处理但是可以在函数体内显示使用this指针。#includeiostream using namespace std; class Date { public: // void Init(Date* const this, int year, int month, int day) void Init(int year, int month, int day) { // 编译报错error C2106: “”左操作数必须为左值 // this nullptr; // this-_year year; _year year; this-_month month; this-_day day; } void Print() { cout _year / _month / _day endl; } private: // 这里只是声明没有开空间 int _year; int _month; int _day; }; int main() { // Date类实例化出对象d1和d2 Date d1; Date d2; // d1.Init(d1, 2024, 3, 31); d1.Init(2024, 3, 31); d1.Print(); d2.Init(2024, 7, 5); d2.Print(); return 0; }下面通过两个选择题测试一下前面的知识学得如何1.下面程序编译运行结果是()A、编译报错 B、运行崩溃 C、正常运行#includeiostream using namespace std; class A { public: void Print() { cout A::Print() endl; } private: int _a; }; int main() { A* p nullptr; p-Print(); return 0; }2.下面程序编译运行结果是()A、编译报错 B、运行崩溃 C、正常运行#includeiostream using namespace std; class A { public: void Print() { cout A::Print() endl; cout _a endl; } private: int _a; }; int main() { A* p nullptr; p-Print(); return 0; }3. this指针存在内存哪个区域的 ()A. 栈 B.堆 C.静态区 D.常量区 E.对象里面也有可能在寄存器中答案CBA4.C和C语言实现Stack对比面向对象三大特性封装、继承、多态下面的对比我们可以初步了解一下封装。通过下面两份代码对比我们发现C实现Stack形态上还是发生了挺多的变化底层和逻辑上没啥变化。C中数据和函数都放到了类里面通过访问限定符进行了限制不能再随意通过对象直接修改数据这是C封装的一种体现这个是最重要的变化。这里的封装的本质是一种更严格规范的管理避免出现乱访问修改的问题。当然封装不仅仅是这样的我们后面还需要不断的去学习。C中有一些相对方便的语法比如Init给的缺省参数会方便很多成员函数每次不需要传对象地址因为this指针隐含的传递了方便了很多使用类型不再需要typedef用类名就很方便。C实现Stack代码#includestdio.h #includestdlib.h #includestdbool.h #includeassert.h typedef int STDataType; typedef struct Stack { STDataType* a; int top; int capacity; }ST; void STInit(ST* ps) { assert(ps); ps-a NULL; ps-top 0; ps-capacity 0; } void STDestroy(ST* ps) { assert(ps); free(ps-a); ps-a NULL; ps-top ps-capacity 0; } void STPush(ST* ps, STDataType x) { assert(ps); // 满了扩容 if (ps-top ps-capacity) { int newcapacity ps-capacity 0 ? 4 : ps-capacity * 2; STDataType* tmp (STDataType*)realloc(ps-a, newcapacity * sizeof(STDataType)); if (tmp NULL) { perror(realloc fail); return; } ps-a tmp; ps-capacity newcapacity; } ps-a[ps-top] x; ps-top; } bool STEmpty(ST* ps) { assert(ps); return ps-top 0; } void STPop(ST* ps) { assert(ps); assert(!STEmpty(ps)); ps-top--; } STDataType STTop(ST* ps) { assert(ps); assert(!STEmpty(ps)); return ps-a[ps-top - 1]; } int STSize(ST* ps) { assert(ps); return ps-top; } int main() { ST s; STInit(s); STPush(s, 1); STPush(s, 2); STPush(s, 3); STPush(s, 4); while (!STEmpty(s)) { printf(%d\n, STTop(s)); STPop(s); } STDestroy(s); return 0; }C实现Stack代码#includeiostream using namespace std; typedef int STDataType; class Stack { public: // 成员函数 void Init(int n 4) { _a (STDataType*)malloc(sizeof(STDataType) * n); if (nullptr _a) { perror(malloc申请空间失败); return; } _capacity n; _top 0; } void Push(STDataType x) { if (_top _capacity) { int newcapacity _capacity * 2; STDataType* tmp (STDataType*)realloc(_a, newcapacity * sizeof(STDataType)); if (tmp NULL) { perror(realloc fail); return; } _a tmp; _capacity newcapacity; } _a[_top] x; } void Pop() { assert(_top 0); --_top; } bool Empty() { return _top 0; } int Top() { assert(_top 0); return _a[_top - 1]; } void Destroy() { free(_a); _a nullptr; _top _capacity 0; } private: // 成员变量 STDataType* _a; size_t _capacity; size_t _top; }; int main() { Stack s; s.Init(); s.Push(1); s.Push(2); s.Push(3); s.Push(4); while (!s.Empty()) { printf(%d\n, s.Top()); s.Pop(); } s.Destroy(); return 0; }结语这篇文章全文由作者手写图片由画图软件所制无AI制作希望各位博友能有所收获欢迎各位博友的讨论觉得不错的小伙伴别忘了点赞关注哦~

相关文章:

【C++】类和对象( 类的定义、实例化、 this指针、 C++和C语言实现Stack对比)

小编主页详情<-请点击 小编gitee代码仓库<-请点击 本文主要介绍了类和对象&#xff08; 类的定义、实例化、 this指针、 C和C语言实现Stack对比&#xff09;&#xff0c;内容全由作者原创&#xff08;无AI&#xff09;&#xff0c;并带有配图帮助博友们更好的理解&#x…...

杰理微蓝牙芯片AC696系列入门

1.文章背景 此篇文章以ac696n_soundbox_sdk_v1.7.0版本进行入门讲解&#xff1a; 写这篇文章的目的是因为自己在尝试入门杰理微的时候遇到了好多的问题点&#xff0c;想尝试用买到的开发板来驱动一颗LED闪烁却一直没有按自己想象的逻辑成功跑出效果&#xff0c;在网上到处翻找手…...

电脑截图工具深度测评:PixPin、Snipaste、兔灵截图(Utools插件)

日常办公、写教程、做笔记&#xff0c;截图是高频刚需。Windows自带截图简陋&#xff0c;截图功能有限&#xff0c;精准标注、长截图、OCR识别等需求&#xff0c;需要专业工具来满足。 本文实测3款「免费无广告、口碑拉满」的截图工具&#xff1a;PixPin、Snipaste、兔灵截图&a…...

一条 SQL 干掉 8 秒卡顿,只因改了一个索引

一条 SQL 干掉 8 秒卡顿,只因改了一个索引 上周五晚上十一点,线上告警突然炸了,用户反馈下单接口卡成 PPT。打开慢查询日志一看,一条最普通的订单查询 SQL 居然跑了 8 秒多。当时我脑子里只有一个念头:这条 SQL 我上周才写的,测试环境明明只要 200 毫秒啊。排查了一整晚,…...

【Java入门|集合全解析:List、Set与Map详解】

Java集合Java集合分为单列集合和双列集合&#xff0c;也就是 Collection 和 Map 。顾名思义&#xff0c; Collection 一个位置上仅存放一个元素&#xff1b; Map 一个位置上有两个元素&#xff08;分为键和值&#xff09;。 Map 和 Collection 下又分别衍生出多种集合种类&…...

晶振参数深度解读与替代选型实战(55.2MHz 工业级无源晶振案例)

前言作为嵌入式 / 硬件 FAE&#xff0c;日常工作中晶振的参数解读、客户需求替代是高频场景。最近遇到一个典型的工业级宽温晶振客户需求&#xff0c;参数里藏着很多新手容易踩的坑&#xff0c;比如 “负频率” 的误解、负载电容不匹配、宽温范围忽略等问题。本文以客户的55.2M…...

Android 开发问题:It‘s possible to extract method returning XXX from a long surrounding...

在 Android 开发中&#xff0c;Android Studio 出现如下提示信息 Its possible to extract method returning TakeCardRecordListDTO from a long surrounding method# 解读可以从长方法中提取返回“TakeCardRecordListDTO”的方法问题原因这段提示是提取方法重构策略&#xff…...

推客系统开发|企业私域裂变刚需,低成本自动获客变现

公域投流成本居高不下、流量转化疲软&#xff0c;当下多数商家、企业都在转型私域运营。推客系统凭借低成本裂变、自动化运营、高留存等优势&#xff0c;成为企业盘活自有流量、实现自主拓客的核心工具。一、专属定制开发&#xff0c;适配各类业态支持个性化定制&#xff0c;自…...

别再只问哪个大模型更强了,2026年真正决定AI Agent上限的,是向量引擎

别再只问哪个大模型更强了&#xff0c;2026年真正决定AI Agent上限的&#xff0c;是向量引擎 这两年做AI的人&#xff0c;最容易掉进一个坑。 每天盯着模型榜单看。 今天这个模型会写代码了。 明天那个模型会看视频了。 后天又有一个模型说自己推理能力更强了。 看久了以后&…...

别再傻等!EPLAN部件库导入太慢?试试这个解压导入法,效率翻倍

EPLAN部件库高效导入实战&#xff1a;解压法与便携式部署全解析 电气工程师们对EPLAN的部件库导入速度缓慢一定深有体会——当你拿到一个几百兆的EDZ文件&#xff0c;点击导入后泡杯咖啡回来可能进度条才走了一半。这种等待不仅浪费时间&#xff0c;更会打断工作节奏。本文将彻…...

从“黑盒”到“白盒”:深入理解PHP伪协议php://input的底层机制与安全开发启示

从“黑盒”到“白盒”&#xff1a;深入理解PHP伪协议php://input的底层机制与安全开发启示 在Web安全领域&#xff0c;文件包含漏洞一直是攻击者青睐的攻击向量。而PHP伪协议php://input的巧妙利用&#xff0c;往往能让看似无害的文件包含操作演变为致命的远程代码执行漏洞。本…...

Zotero安装后必做的5件事:从浏览器抓取到PDF重命名,新手避坑指南

Zotero安装后必做的5件事&#xff1a;从浏览器抓取到PDF重命名&#xff0c;新手避坑指南 第一次打开Zotero时&#xff0c;面对空荡荡的界面和密密麻麻的菜单选项&#xff0c;很多科研新手都会感到无从下手。作为一款功能强大的开源文献管理工具&#xff0c;Zotero的真正价值往往…...

Microchip安卓配件开发平台:MCU与安卓系统高效协同实战指南

1. 项目概述&#xff1a;当单片机巨头拥抱安卓生态作为一名在嵌入式领域摸爬滚打了十几年的老工程师&#xff0c;我经历过从8位机到32位ARM&#xff0c;再到各种RTOS的变迁。但最近几年&#xff0c;一个趋势越来越明显&#xff1a;越来越多的智能设备&#xff0c;特别是那些需要…...

拓璞数控港股上市:市值142亿港元 年营收5.8亿,净利163万

雷递网 雷建平 5月20日上海拓璞数控科技股份有限公司&#xff08;简称&#xff1a;“拓璞数控”&#xff0c;股票代码&#xff1a;“07688”&#xff09;今日在港交所上市。拓璞数控此次发售6533万股&#xff0c;发售价26.39港元&#xff0c;募资总额为17.24亿港元&#xff1b;…...

港科大沈劭劼、谭平团队最新成果:开源280万全景数据集,实现零样本立体匹配

「一举攻克全景3D视觉两大瓶颈」 目录 01 行业痛点&#xff1a;数据匮乏与畸变失效的双重桎梏 1. 数据集稀缺&#xff0c;泛化能力受限 2. 球面畸变破坏单目先验一致性 02 核心突破&#xff1a;超大数据与航向对齐先验双驱动 1. 280万级合成数据集&#xff0c;打破数据壁…...

保姆级教程:在S32G274ARDB2上,用IPCF点亮RGB LED(附源码解析)

从零玩转S32G2核间通信&#xff1a;手把手实现IPCF控制RGB灯效 拿到S32G274A开发板的第一天&#xff0c;我就被那个三色RGB LED吸引了——这不仅是硬件调试的指示灯&#xff0c;更是验证核间通信的绝佳媒介。作为多核异构处理器&#xff0c;S32G2的A53与M7核心如何协同工作&…...

基于PSoC 6与BMI160构建嵌入式IMU测试系统:从驱动到上位机全流程

1. 项目概述&#xff1a;从一颗传感器到一个完整的测试系统最近在做一个嵌入式项目&#xff0c;需要用到一款高性能的惯性测量单元&#xff08;IMU&#xff09;——博世的BMI160。这颗芯片在消费电子和物联网领域很常见&#xff0c;三轴加速度计加三轴陀螺仪&#xff0c;精度和…...

告别MPU6050例程!ATK-IMU901与Arduino串口通信的3个关键避坑点

ATK-IMU901与Arduino串口通信的实战避坑指南 当你从MPU6050切换到ATK-IMU901时&#xff0c;可能会发现原本顺畅的代码突然"罢工"了。这不是你的错——这两款IMU模块在设计理念上存在本质差异。本文将带你深入理解ATK-IMU901的通信机制&#xff0c;避开三个最常见的移…...

cp520靶场学习笔记

正文1、端口扫描2、web登录页面用户密码爆破3、文件上传漏洞利用4、nc 反弹5、Linux用户检索与特权分析6、图片隐写7、解密与格式转换8、cp命令横向获取用户密码9、diff命令进行文件比较正文 kali攻击机地址&#xff1a;192.168.1.4 靶场地址&#xff1a;192.168.1.15 1、端口…...

AOCODARC-F7MINI飞控固件编译踩坑记:从‘make arm_sdk_install’失败到成功编译

AOCODARC-F7MINI飞控固件编译实战&#xff1a;从工具链安装到烧录全流程解析 1. 环境准备与工具链安装 编译BetaFlight固件最令人头疼的环节往往不是代码本身&#xff0c;而是环境配置。以Ubuntu 20.04为例&#xff0c;我们需要先解决两个核心问题&#xff1a;基础编译环境和AR…...

C++ STL常用函数一览表(快速记忆版本)

C STL 常用数据结构与函数整理 这份笔记按常见 STL 容器分类整理&#xff0c;适合在刷题和复习时快速查阅。1. vector 1.1 特点 底层是动态数组支持随机访问尾部插入、删除效率高中间插入、删除效率低 1.2 常用定义 vector<int> v; vector<int> v(5); /…...

不止是省9.9刀:解锁特斯拉Model 3的‘行驶中保持WiFi’功能,打造家庭移动娱乐中心

不止是省9.9刀&#xff1a;解锁特斯拉Model 3的‘行驶中保持WiFi’功能&#xff0c;打造家庭移动娱乐中心 特斯拉Model 3的车载4G网络虽然方便&#xff0c;但在信号不佳的区域或需要大流量娱乐的场景下&#xff0c;往往显得力不从心。更让许多家庭用户纠结的是&#xff0c;高级…...

STM32 HAL库驱动中景园0.96寸OLED(SSD1306)避坑指南:从IIC地址到GRAM刷新的完整流程

STM32 HAL库驱动中景园0.96寸OLED&#xff08;SSD1306&#xff09;全流程实战解析 在嵌入式开发中&#xff0c;OLED显示屏因其高对比度、低功耗和快速响应等特性&#xff0c;成为许多项目的首选显示方案。本文将深入探讨如何基于STM32 HAL库高效驱动中景园0.96寸OLED&#xff0…...

Kimi、DeepSeek、阶跃星辰三天融资超百亿,中国AI的“中场战事”刚刚开始

过去一周&#xff0c;融资狂潮、智能体大军与算力基建三大赛道同时开火&#xff0c;天平正在加速倾斜。大模型调用量&#xff1a;连续三周&#xff0c;中国AI压住美国5月18日&#xff0c;根据OpenRouter最新数据&#xff0c;2026年5月11日至17日当周&#xff0c;全球AI大模型总…...

未来5年,程序员换工作,请做好降薪准备!

最近看到不少大厂的去年和一季度财报都公布了&#xff0c;不少人年终奖也发的差不多了&#xff0c;再加上金三银四也过了有一段时间了。按理来说&#xff0c;该晋升的晋升&#xff0c;该跳槽的跳槽&#xff0c;该加薪的加薪&#xff0c;基本尘埃落定&#xff0c;我公号后台应该…...

API 监控告警系统

LogMonitor - API监控告警系统 基于Python的智能API监控系统&#xff0c;集成Splunk日志分析和钉钉告警&#xff0c;支持多种API类型的实时监控和趋势分析。 代码地址 https://github.com/junbingliu007/log_monitor 功能特性 多API类型监控&#xff1a;支持多种API类型智…...

Midjourney × CLO 3D无缝协同方案(工业级打版前必读):实现AI草图→虚拟缝合→力学模拟零损转换

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Midjourney CLO 3D无缝协同方案&#xff08;工业级打版前必读&#xff09;&#xff1a;实现AI草图→虚拟缝合→力学模拟零损转换 在高精度服装数字样衣开发流程中&#xff0c;Midjourney生成的创意草图常因缺…...

企业级RAG系统数据可信生死线:Perplexity验证功能内测权限仅剩最后17个——附白名单申请通道

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;企业级RAG系统数据可信生死线&#xff1a;Perplexity验证功能内测权限仅剩最后17个——附白名单申请通道 在企业级RAG&#xff08;Retrieval-Augmented Generation&#xff09;系统中&#xff0c;检索结果与生…...

有这5个迹象,说明你公司内斗很严重!

见字如面&#xff0c;我是军哥&#xff01;昨天&#xff0c;一位读者小王给我留言。他在某大厂担任项目经理&#xff0c;最近工作推进得很艰难。同一件事开了好几次会&#xff0c;领导就是不拍板。跨部门协作费力不讨好&#xff0c;谁都不愿负责&#xff0c;项目卡在那里没有进…...

光纤干涉条纹投射导向的动态三维形貌测量技术【附程序】

✨ 长期致力于条纹投射轮廓术、光纤干涉条纹投射、正弦相位调制、任意步距相移相位解调、系统标定研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;基于…...