对象揭秘[LanJoyner]--第三章 模块与导入

从零开始:Vivado中自定义串口通信IP核的完整实现 本文详细介绍了在Vivado中从零开始实现自定义串口通信IP核的完整流程,包括Verilog核心代码编写、仿真验证、IP核封装与参数化配置技巧。通过AXI-Lite总线实现动态配置,提升FPGA开发效率,适用于各种嵌入式系统通信需求。 阅读详情

 

 

 

    大致扫了下第3章,模块与导入。写作风格大致是LanJoyner批判C++的某些不是,然后以Java,Eiffel的在这方面的优势来比较论述的。作为程序员。从我的观点出发,这一章是写的非常客观的。我大致有2年的C++开发经验和2年的Java开发经验。而且是不断切换(而不是中间断层)这两种技术解决工作上的问题的。所以深有感触。虽然项目不大,但是在"模块"这个特性上,C++要逊于Java的。

     但我个人认为,Stroustrup博士(C++发明者)在当时有大量的问题处理。而且本来就是踩着C的肩膀往上走的。在当时那个环境下,需要优先处理的关于语言的特性中,#include可能是放在最后,或者根本不予考虑的。而且本身要兼容C,所以在有用C的#include机制这个武器上,可能本身就没有认为有什么不对。而且我个人认为,因为Java,Eiffel的"模块"处理技术更完善(对于程序员来讲更轻松)才凸显出C++"模块"特性的不足。

    对于C++"模块"的缺点是:(我粗粗看了这一章,归纳出下面几点,估计还有其他)

       1 #include 机制的主要问题是它建立了递进依赖关系.(<<对象揭秘>>中文版P70)

                  猪头---->递进依赖关系的大体含义就是没有使用某实体还会被被某实体影响。

                  如果A包含于B,B包含于C,C包含于D,那如果A改变了D一定需要重新编译吗?

                  在C++里回答是"是",在Java,Eiffel回答是"否",(Java偶确定,Eiffel偶不熟悉:))

     2 C++的头文件机制并没有彻底实现接口与实现的分离(内联和私有成员的作怪)

                猪头---->LanJoyner的看法,如果私有成员本身需要隐藏的东西,子类和其他类

               都不可见,那为什么要给其他类的使用者能看到这个东西。(难道是考虑友元的

              需要?)

    3 (个人认为)C++的#include 机制额外地的增加了集成开发环境编写一些有助于提高编码效率

    的工具的复杂度(eclipse的CDT)。

LanJoyner写的比较精彩的几处地方(猪头个人认为):

1 接口与实现必须分离。我同意模块的用户只应该看接口.但是,C++这点上做的好吗?答案是否定的,至少有两个理由。首先,如果你要利用内联函数的潜能,你就必须讲实现放在头文件中.其次,类的定义包含了一个私有区域,这个私有区域把类的私有实现细节暴露给了用户。C++鼓吹讲接口和实现分离,可是在这一支持上却做的很差.(LanJoyner写的真是一针见血)

2  在构造任何系统时要考虑的基本问题是:如何将系统细分为模块,这些模块讲如何交互,如何访问彼此的信息,获得彼此的服务。你不仅必须考虑这个问题(问题分析),还必须决定这些新的模块将如何从已有模块的基础上创建(问题综合)。综合为我们提供了一些有趣的问题。因为你试图整合进一个系统的模块之间可能会有冲突。所以,我们需要一种"模块演算法"来为程序员提供必要的工具。本章将着眼于本书所讨论的编程语言如何看待模块。

3 这是因为C/UNIX的风格:在分开的模块中编程,不做或只做很少的全局分析。

 

 

 

如何通过常规测井曲线识别砂岩、泥岩、碳酸盐岩和煤层 常规测井曲线通过不同岩性的物理性质差异识别砂岩、泥岩、碳酸盐岩和煤层。砂岩表现为低自然伽马(GR)、中等密度(RHOB)和声波时差(DT);泥岩以高GR、高中子(NPHI)和高DT为特征;碳酸盐岩显示低GR、高RHOB和低DT;煤层则具有极低RHOB、极高NPHI和DT的独特组合。综合GR与三孔隙度曲线(RHOB、NPHI、DT)可有效区分岩性,其中密度测井对煤层识别最可靠。电阻率(RT)曲线辅助判断流体性质,但需结合其他参数综合分析。 阅读详情

相关推荐

深入浅出:用状态机搞定FPGA MIG控制器与DDR3的读写时序(附Verilog源码分析)

本文深入解析了如何利用状态机精准控制FPGA MIG控制器与DDR3的读写时序,涵盖Verilog源码实现、关键时序控制点及实战优化技巧。通过状态机设计、跨时钟域处理和带宽优化等方法,有效提升DDR3访问效率,适用于高性能计算和AI加速器等场景。

weixin_26899659的博客 408

三元运算符的优先级

在QT2.3.10的源代码中看到如下使用三元运算符的方法,但不知道具体的运算的顺序    const QCanvasItem* i1 = s1 ?       (const QCanvasItem*)s1 : p1 ?       (const QCanvasItem*)p1 : r1 ?       (const QCanvasItem*)r1 : e1 ?       (const QCa

飞羽飞の猪の博客 4346

VirtualBox增强功能安装全指南:从下载到配置复制粘贴功能

本文详细介绍了VirtualBox增强功能的完整安装与配置流程,重点解决了虚拟机与主机间复制粘贴、文件拖放等核心协作难题。通过分步指南和故障排查,帮助用户在不同操作系统(如Windows、Linux)中实现无缝集成,提升虚拟化工作效率与体验。

weixin_29206669的博客 419

写了个测试vector,map存取的小程序

#include #include #include using namespace std;class object{public:    object():id(objectsum++),name("object"){ cout     ~object(){cout     object(const object& o){id = o.id;name = "object_copy"; cout

飞羽飞の猪の博客 1574

信息收集-服务器信息

服务器上面可以运行大量的系统服务和第三方应用服务,如果操作系统或者第三方软件没有及时升级打补丁,攻击者就有可能直接通过服务器上运行的服务进行攻击。

weixin_49349476的博客 1446

【机器学习入门】1.4 吃透这些基本术语,才算真正入门

本文通过"挑西瓜"的生活案例,形象解释了机器学习的基本术语。样本对应单个西瓜,特征如色泽、根蒂等是观察维度,特征值是其具体表现,标签是西瓜的好坏判断。数据集是样本集合,特征向量是样本的数学表达,特征空间是所有可能的样本组合。文章强调数据集需划分为训练集、验证集和测试集,以评估模型的泛化能力。最后整理了术语对照表,并解答了常见问题。这些基础概念是理解机器学习的关键,建议读者重点掌握。

国科大硕士在读,分享Python/GEE/Matlab/R专业代码实践,涵盖数据分析、算法开发与应用技巧等,以代码会友。 654

刚学C写的东西,纪念下:)

这个程序用来模拟从串口读出NMEA协议的数据并校检和解析~~因为刚用C,C++写代码,写的应该还蛮难看的~~#include #include #include //author:snail//070403typedef unsigned char U8;typedef signed int S32;typedef unsigned short int U16;typedef si

飞羽飞の猪の博客 1505

WorkBuddy驱动SolidWorks实测:AI建模流程、参数化与许可排查指南

AI辅助三维建模正在改变工程师的重复劳动方式。其核心理念不是替代人的设计决策,而是通过AI智能体接管CAD软件中的草图绘制、特征创建、尺寸修改等高频操作,让工程师从繁琐的GUI交互中解放出来。在SolidWorks这类主流CAD平台上,这类AI助手的落地依赖环境稳定、需求描述清晰和参数化建模规范。通过将外径、孔距等关键尺寸定义为全局变量并用方程式驱动,可实现改一个数、模型自动更新的高效流程;同时,遇到“无法获得许可”等环境故障时,需要按服务状态、安全软件隔离、干净卸载的顺序排查。以WorkBuddy驱动So

weixin_28559803的博客 361

[初]对于C++内存模型的一个测试小程序

#include #include using namespace std;//对于C++内存模型的一个测试小程序 //author:snail//date:2007-03-02//*class MemoryKiller{public:     MemoryKiller(){};private:    int bigMemory[1024*1024];  };//全局区(静态区

飞羽飞の猪の博客 1072

时间同步中 TOD 与GPRMC和IRIG-B的区别

时间同步中 TOD 与GPRMC和IRIG-B的区别

ftdlk的博客 1725

YOLO26改进策略【YOLO和Mamba】| 替换骨干 Mamba-YOLO26-L !!! 最新的发文热点

Vision Clue Merge模块在Mamba - YOLO模型中同样重要,主要负责在模型的下采样过程中处理特征图,为后续的特征融合和目标检测任务提供更有效的信息。

Limiiiing的博客 472

[初]snail关于C++指针与内存管理的一些备忘

snail关于C++指针与内存管理的一些备忘Author:snail 有点乱,而且还在整理中~~最近一直在关注程序的内存管理~所以把一些看过的资料做个索引,做个备忘    ---------------snail   07年3月2日(希望璐璐看了会有点帮助,这下面的资料有任何问题都可以问我) 1 C++内存管理详解http://blog.youkuaiyun.com/sna

飞羽飞の猪の博客 1047

OpenHarmony Stage模型深度解剖:从Ability Kit到沙箱隔离的全链路底层原理

基于微内核架构,提供进程管理、内存管理、IPC通信等基础能力:包含V8引擎、ArkTS运行时、渲染引擎等核心组件:Ability Kit框架,提供应用生命周期管理、组件调度等能力:基于Stage模型的应用程序。

m0_67505153的博客 191

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 222

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

选型笔记:Type‑C 扩展坞方案评估|DP1.4 转 HDMI2.0 桥接芯片 GSV2201S@ACP

本文记录 GSV2201S 这款 DP1.4a 转 HDMI2.0 桥接芯片评估,梳理视频、HDCP、PD 集成能力,总结 Type‑C 转接 Dongle、扩展坞方案的适配边界,以及差分走线、PD 时序、HDCP 握手等高频调试问题,为 C 口视频转接方案选型提供参考。

ACP广源盛的博客 220

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 388

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 333

【C语言】字符与字符串函数

C语言中字符串为以\0结尾的字符数组,标准库函数基于此约定。本文解析字符串内存布局,详解ctype.h与string.h中字符分类、长度计算、拷贝、比较等函数的使用要点,强调长度判断与越界风险,最后通过命令行待办事项示例整合fgets、sscanf、strncpy、strcmp,展示实际应用中的关键细节。

记录在学习过程中学到的知识 343

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 377

C++ 函数模版

模板参数:● template ,T 就是类型占位符,名字可以自定义,习惯用T● 占位符可以在函数返回值、形参、函数内部当作类型使用使用要点模板代码一般写在头文件:编译器需要看到完整模板源码,才能在每个编译单元完成实例化全局函数、类内成员函数都可以写成模板实例化发生在编译阶段,不是运行时隐式实例化:调用时编译器自动推导实参类型,生成对应版本函数。

2501_94041724的博客 303

C++ 运行时多态与虚函数机制全面剖析【面试重点】

构成C++ 运行时多态必须是基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,并且派生类必须对该虚函数完成重写/覆盖(Override)。只有基类的指针或引用才能既指向基类对象,又指向派生类对象(切片机制);而只有完成了虚函数重写,派生类与基类才具备不同的函数行为,达到“指向谁就调用谁”的效果。在类成员函数的前面加上virtual关键字修饰,该成员函数就成为了虚函数。public:// 成员函数前加 virtual 修饰,声明为虚函数。

Fuyo_0209的博客 435

#SQLite 数据库笔记一:(概念 / 终端指令 / SQL 语句 / C 编程 / 回调函数)

数据库 = 数据的仓库,假设数据是海量。能力说明存储数据持久化保存,程序退出数据还在统计数据、分组、排序数据管理增、删、改、查(CRUD)嵌入式设备上也会用数据库(单片机网关、路由器、工业 HMI 都常见),因为 sqlite 体积小、无需服务进程、单文件即可。数据库 = 库 > 表 > 记录(行) > 字段(列)sqlite3 = 开源、C 写的、单文件、免安装、最多 2T 的嵌入式关系型数据库。

lwq20051110的博客 149

【C++】【STL】string_OJ题

本文总结了9道C++ STL中关于string的OJ题目,按操作类型分为三组:反转与就地修改(如917、541、151)、计数与查找(如387、125、58)、模拟与大数运算(如415、43、8)。核心技巧包括双指针收敛、字符分类处理、进位控制及边界值处理。所有题目使用同一套源码,在标准库std::string与自定义容器MyString间切换仅需宏定义,验证结果一致性。代码通过随机测试用例与Trace函数逐行比对,确保逻辑正确性,强调接口对齐的重要性。

这里是Cocatrice的博客,感谢大家一直以来的支持和鼓励,如果对C/C++方向感兴趣的话,可以通过主页的微信名片加Cocatrice的好友,也可以通过邮箱:Chen31980094@163.com 联系,一同加油! 4370

C 语言 malloc() 详解与实战 Demo

本文详解C语言malloc()函数,涵盖其语法、内存原理及实战应用。通过动态整数、数组、结构体与链表的Demo,演示如何安全申请、使用与释放内存,强调避免内存泄漏与空指针检查的重要性,帮助开发者掌握动态内存管理核心技能。

tangPHP的博客 366

【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针

C++类与对象知识(面向过程和面向对象的初步认识,类的初步认识,类的访问限定符及封装,类的作用域、实例化,类的对象模型,this指针)

2601_96587588的博客 874

【C++ 基础入门】C++继承(下):问题、底层原理与组合

C++继承(菱形继承的问题、虚继承原理、继承与组合、构造顺序)

2601_96587588的博客 763
上一篇: 三元运算符的优先级
下一篇: 最常用的Google Reader快捷键
飞羽飞之猪
博客等级 码龄21年 127粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值