关于 C++软件设计的建议
简介
RT
参考资料
C++语言的设计与演化
内容
在回答这个问题时,程序员经常把注意力集中在语言特征上:我要不要使用 inline 函数?虚函数?多重继承?单根层次结构?抽象类?重载函数?这种关注根本就是错的。
这些语言特征的存在只是为了支持更具本质性的折中:设计是否应该
• 强调运行时的效率?
• 使修改之后的重新编译达到最小化?
• 最大化跨平台的可移植性?
• 允许用户扩展基本的库?
• 允许在没有源代码的情况下使用?
• 与现存的记法和风格混合在一起?
• 使之可以从不是用 C++写的代码中调用?
• 对新手也很容易使用?
给出了对于这些问题的回答之后,自然而然地也就有了对于语言层问题的答案。
库的设计思想
名称空间解决了不同的库中使用同样名称的基本问题;异常处理为建立一种处理错误的公共模型提供了基础。
模板是为定义独立于具体类型的容器类和算法而提供的一种机制,其中的具体类型可以由用户或者其他的库提供。
构造函数和析构函数为对象的初始化和最后清理提供了一种公共模型。抽象类提供了一种机制,借助于它可以独立地定义接口,与实际被接口的类无关。运行时的类型信息是为寻回类型信息而提供的一种机制,因为当对象被传递给一个库然后再传递回来的时候,可能只携带着不够特殊的(基类的)类型信息。当然这些不过是有关语言功能的一方面用途,但如果把他们看成针对由独立开发的库触发去构造程序的支持功能,问题就更清楚了。
最好的方式是库的供应商认识到他们并不拥有整个世界,将来也不会如此,而给予这种认识设计出的库,实际上最符合他们自身的利益。
关于 C++软件设计的建议的更多相关文章
- [置顶] 软件设计之道_读书纪要.doc
本系列的文档都是我读书后的个人纪要,如想了解更多相关内容,请购买正版物.对应的图书可以从我的个人图书列表里找寻:个人毕业后图书列表 1. 每个写代码的人都是设计师,团队里每个人都有责任保证自己的代码 ...
- AOP软件设计
什么是面向方面的编程? 为什么面向方面的软件设计? 术语 关注 视口 关注点分离 人工制品 横切 方面 编织 零件 形式主义 第二节 案例研究 关注 人工制品 横切 方面 AspectJ 加入点 切入 ...
- 这样学BAT必面之软件设计原则,还不会就是我的问题
学习设计原则是学习设计模式的基础.在实际开发过程中,并不要求所有代码都遵循设计原则,我们要考虑人力.时间.成本.质量,不能刻意追求完美,但要在适当的场景遵循设计原则,这体现的是一种平衡取舍,可以帮助我 ...
- 读书笔记《A Philosophy of Software Design - John Ousterhout 软件设计哲学》
软件设计哲学这本书很薄,值得一读.这本书将大家平时碰到的很多软件问题从更深刻的层面进行了抽象分析,同时又给出了具体的解决方案.可以说既有理论高度,又能贴近实践. 但针对软件问题,这本书并没有提出太多与 ...
- 我的敏捷、需求分析、UML、软件设计电子书 - 下载(持续更新中)
我将所有我的电子书汇总在一起,方便大家下载!(持续更新) 文档保存在我的网站——软件知识原创基地上(www.umlonline.org),请放心下载. 1)软件设计是怎样炼成的?(2014-4-1 发 ...
- C#远程时间同步助手软件设计
C#远程时间同步助手软件设计 本程序才C#语言开发,实现远程时间同步功能,可以将本地时间每隔一段时间与时间服务器时间进行同步!不足之处还望见谅! 软件开发环境:Visual Studio 2010 软 ...
- 敏捷遇上UML-需求分析及软件设计最佳实践(郑州站 2014-6-7)
邀请函: 尊敬的阁下:我们将在郑州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实 ...
- C#软件设计——小话设计模式原则之:依赖倒置原则DIP
前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做“全战”, ...
- C#软件设计——小话设计模式原则之:单一职责原则SRP
前言:上篇C#软件设计——小话设计模式原则之:依赖倒置原则DIP简单介绍了下依赖倒置的由来以及使用,中间插了两篇WebApi的文章,这篇还是回归正题,继续来写写设计模式另一个重要的原则:单一职责原则. ...
- C#软件设计——小话设计模式原则之:接口隔离原则ISP
前言:有朋友问我,设计模式原则这些东西在园子里都讨论烂了,一搜一大把的资料,还花这么大力气去整这个干嘛.博主不得不承认,园子里确实很多这方面的文章,并且不乏出色的博文.博主的想法是,既然要完善知识体系 ...
随机推荐
- 关于TCP的握手与挥手
关于TCP的握手与挥手 前言 由于自己每次都是唱的比懂的好听,光知道唱"三次握手四次挥手",再往里细问SYN标志就只能阿巴阿巴阿巴,为了解决自己的知识储备问题,顺便继续深入了解TC ...
- python,提取数据,提取奇数位或者偶数位数据的方法
如有数组num=["1","2","3","4","5"] 怎么按照奇.偶数位取数? 写法如下 nu ...
- Cpu 资源占用高排查
查看java进程 ps aux | grep java 或者 ps -ef | grep java 查看java进程 线程信息 使用top -p [PID] -H 观察该进程中所有线程的资源占用 to ...
- AutoFac学习Demo1——官网Demo
AutoFac实现Demo1 1.创建一个工作台(.NET Core)程序AutofacDemo1,nuget引入AutoFac,搜索第一个就是 2.创建输出接口IOutput及实现ConsoleOu ...
- 操作系统综合题之“采用FCFS(先进先出)调度算法执行,计算进程平均带权周转时间”
一.问题:有3个进程p1.p2.p3,其进入系统的时间和服务器时间如下表所示,按FCFS调度算法,她们的平均带权周转时间是多少(注:四舍五入精确到小数点后两位) 二.参考答案 答: p1周转时间 = ...
- CUDA简单介绍
并行计算 并行计算(parallel computing)是一种计算形式,它将大的问题分解为许多可以并行的小问题. 并行计算分为:任务并行(task parallel)和数据并行(data paral ...
- C# system.Threading.Timer和system.Timers中的定时器
它们都可以用于在指定时间间隔后执行代码.然而,它们在实现和用法上有一些差异. System.Threading.Timer: System.Threading.Timer 是基于线程的定时器,它属于 ...
- codeup之输出梯形
Description 输入一个高度h,输出一个高为h,上底边为h的梯形. Input 一个整数h(1<=h<=1000). Output h所对应的梯形. Sample Input Co ...
- 求阶乘末尾0的个数(java)
末尾0的个数 题目描述 输入一个正整数,求n!末尾有多少个0?比如n = 10; n! = 3628800 ,所以答案为2 输入描述 输入为一行,n (1 <= n <= 1000)//输 ...
- L2-2、示范教学与角色扮演:激发模型"模仿力"与"人格"
一.Few-shot 教学的核心原理与优势 在与大语言模型交互时,Few-shot(少样本)教学是一种强大的提示技术.其核心原理是通过提供少量示例,引导模型理解我们期望的输出格式和内容风格. Few- ...