![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Programming skills
文章平均质量分 51
我走的很慢
这个作者很懒,什么都没留下…
展开
-
深入C++(一)
1. How to compile and link the test.cpp fileg++ test -o test.cpp2. Basics of class in c++(1)派生类也无法看到基类中的私有成员函数(2)继承时,派生类中与基类同名的成员函数将会覆盖基类中的成员函数,参数列表不同的同名函数也会被覆盖(3)静态成员函数属于类而不属于任何对象(4)当基类中声明了虚成员函数时,如果派生类中的成员函数有与该虚函数同名、同参数且返回值类型相同,则该派生类成员函数自动成为虚函数,可以在运原创 2021-03-07 11:22:20 · 173 阅读 · 0 评论 -
左值、右值、浅拷贝、深拷贝、移动语义、RVO、OpenFOAM中的autoPtr类和tmp类、std::unordered_map、函数指针(2021.01.17)
学习记录2021.01.17Programming二级目录三级目录Programming左值(lvalue):locator value 可寻址的数据,可位于等号任意侧右值(rvalue):read value 不可寻址的数据,无法位于等号左侧常量左值可以引用引用右值,但不能改变右值;右值引用可以改变右值std::move() 将左值转为右值浅拷贝:拷贝被传入指针的地址深拷贝:分配一块新的内存来拷贝,该内存与被传入指针所指向的对象的大小相同移动语义:通过移动构造函数实现,转移资源所有权而免原创 2021-01-17 23:37:39 · 438 阅读 · 0 评论 -
代码大全—精华摘录(七)
内容待补充...封装实现的细节[^1]封装实现的细节1封装填补了抽象留下的空白。抽象是说“可以让你从高层的细节来看待一个对象。”而封装则说:”除此之外,你不能看到对象的任何其他细节层次。”封装:只能让你知道哪里又门,门是开还是关,但不能让你知道门是木制的还是钢制的,更不能然你看到每一根木纤维。未完待续…McConnell S. Code Complete 2nd Edition[M]. Microsoft Press, 2004. ↩︎...原创 2021-02-21 16:19:33 · 104 阅读 · 0 评论 -
代码大全—精华摘录(六)
文章目录设计构造块:启发式方法[^1]形成一致的抽象[^1]设计构造块:启发式方法1软件设计是非确定性的,灵活熟练地运用一组有效地试探法是合理地软件设计地核心工作。先别问系统做什么,问问它想模仿什么!对象对其他对象暴露地数据及方法都被称为该对象地“公开接口”,而对象向其派生对象暴露的部分则被称为“受保护的接口”使用对象进行设计的步骤:(1)识别系统中包含的对象及其属性(2)定义可对对象执行的操作(3)确定对象可对其他对象进行的操作(依赖、继承等交互关系)(4)确定对象的哪些部分对其他对象原创 2021-02-21 16:17:00 · 97 阅读 · 2 评论 -
代码大全—精华摘录(五)
文章目录设计的层次[^1]设计的层次1把系统分解为子系统后,如果所有子系统都能与其他子系统通信,那么就失去了把它们分开所带来的好处。如果把子系统之间的连线当成水管,那么好的设计能够使得更换某个子系统时,需要重新连接的水管尽可能少。只有在“确需了解”时,才应该允许子系统之间的通信为了让子系统之间的连接简单易懂且易于维护,需要尽量简化子系统之间的交互关系。交互关系的由简单到复杂排名(简单到复杂):(1)一个子系统调用另一个子系统的子程序;(2)一个子系统包含另一个子系统中的类;(3)一个子系原创 2021-02-21 16:14:53 · 124 阅读 · 2 评论 -
代码大全—精华摘录(四)
文章目录理想的设计特征[^1]理想的设计特征1最小复杂度:要避免做出“聪明的”设计,因为“聪明的”设计常常都是难以理解的,应该做出简单且易于理解的设计。易于维护:为做维护工作的程序员着想。请时刻想着维护程序员可能会就你的代码而提出的问题,进而设计出能自明的(self-explanatory)系统来。松散耦合:让程序的各个组成部分之间关联最小。应用类接口中的合理抽象、封装性、信息隐藏等原则。可扩展性:在无须破坏系统底层结构的前提下,增强系统的功能。改动系统的某一部分而不会影响到其他部分。越是可能发原创 2021-02-21 16:13:54 · 285 阅读 · 2 评论 -
代码大全—精华摘录(三)
文章目录关键的设计概念[^1]关键的设计概念1软件的首要技术革命:管理复杂度本质属性:是一件事物必须具备、如果不具备就不再是该事物的属性。偶然属性:是一件事物碰巧具有的属性,有没有这些属性都不影响这件事物本身。从本质上说,软件开发就是不断地去发掘错综复杂、相互连接地整套概念的所有细节。本质性困难的根源在于复杂性。当没人知道对一处代码的改动会对其他代码带来什么影响时,项目也就快停止进展了。降低复杂度的方法:(1) 软件架构:把整个系统分解为多个子系统来降低问题复杂度;降低子系统间的相互依赖;原创 2021-02-21 16:09:54 · 141 阅读 · 2 评论 -
代码大全—精华摘录(二)
文章目录关键的“构建”决策[^1]设计中的挑战[^1]关键的“构建”决策1Sapir-Whorf假说:你思考的能力取决于你是否知道能够表达该思想的词汇。成功编程的一个关键就在于避免随意地变化,这样你的大脑可以专注于那些真正需要的变化。程序员应首先决定他要表达的思想是什么,然后决定如何使用特定语言提供的工具来表达这些思想,而不是将思想限制于”语言直接支持的那些构件“,因为如果语言工具是初级的,那么程序员的思想也是初级的。如果你使用的语言缺乏你希望用的构件,那就应该试着去弥补它。发明你自己的编码约定原创 2021-02-21 16:04:29 · 129 阅读 · 0 评论 -
代码大全—精华摘录(一)
前期准备1明确的需求可以避免你去猜测用户需要什么开发过程:问题定义-需求-架构-构建-系统测试-将来的改进如果没有一个良好的问题定义,你努力解决的可能是一个错误的问题那些记得”考虑自己的决定所带来的商业影响“的程序员的身价与黄金相当如果你不能向一个六岁小孩解释某件事,那么你就没有真正理解它架构应该定义程序的主要构造块。根据程序规模不同,各个构造块可能是单个类,也可能是由许多类组成的一个子系统。每个构造块实现一种高层功能。每条需求应该至少有一个构造块覆盖它。构造块的应负责某一区域的事情,并对其他原创 2021-02-21 15:58:20 · 271 阅读 · 0 评论 -
拷贝构造函数与拷贝赋值运算符的调用时机?
拷贝构造函数与拷贝赋值运算符的调用方式类的定义调用拷贝构造函数的情形调用拷贝赋值运算符号的情形类的定义class CMatrix{public: CMatrix(); // 默认构造函数 CMatrix(const CMatrix& rhs); // 拷贝构造函数 CMatrix& operator=(const CMatrix& rhs); // 拷贝赋值运算符 ...};调用拷贝构造函数的情形CMatrix m1; // 调用默认构造函数CMatrix原创 2021-02-02 23:38:55 · 120 阅读 · 0 评论 -
函数指针与函数名的关系
函数指针函数指针与函数名的关系调用函数的多种书写形式函数指针的多种赋值方式函数指针与函数名的关系函数名是函数指针常量函数指针是函数指针变量调用函数的多种书写形式定义:void Fun(int)调用:Fun(10),(*Func)(10)解释:函数名就是函数指针常量,为了方便使用才允许用Fun(10)的方式来使用函数名函数指针的多种赋值方式定义:void (*pFun)(int)用函数指针pun调用void Fun(int)函数的四种方式:// First waypFun原创 2021-01-25 23:55:28 · 607 阅读 · 0 评论 -
大小端模式&互斥锁mutex&智能指针自动释放堆内存的原理
大小端模式&互斥锁mutex&智能指针能自动释放堆内存的原理大小端模式互斥锁智能指针自动释放堆内存的原理大小端模式小端模式是指把数据的低位排列在内存的低地址端,即数据在内存上逆序排列大端模式是指把数据的高位排列在内存的低地址端,即数据在内存上正序排列互斥锁生活中的互斥锁:夫妻二人住在一起,只有一个厕所,当丈夫正在上厕所时,妻子也想上,怎么办呢?很简单,把厕所门锁上何时需要加互斥锁mutex:如果一个函数内部会对独一份系统资源或地址进行使用或修改,且该函数可能被多个调用者同时原创 2021-01-23 23:15:36 · 216 阅读 · 0 评论 -
静态函数
静态函数静态函数静态函数静态成员函数没有this指针,而普通成员函数有this指针静态成员函数只能访问静态成员;静态成员函数可以通过类调用,即可以在对象创立前被调用;静态成员函数的初始化需要在类外定义;...原创 2021-01-18 22:19:58 · 179 阅读 · 0 评论