本文共 1336 字,大约阅读时间需要 4 分钟。
今天和老大哥们聚会,又接触了不少新事物。
争取今天把这个系列整理完,最近信息有点太多了,分析不过来了。先屯着,慢慢发。 请大家给我点时间,我缓一下。接下来,将会有大动作了。
我就不多说,直接用。
中间跳过一波,不为啥,看不懂。
这个条款让我想起了“模板方法模式”,但是我讲不清楚这个模式,倒不是讲不清楚该怎么用,就是讲不清楚有什么用。现在又知道一个用法了。
就拿我做的第一个小demo来说,是一个输入输出控制函数。
这个demo也被广泛的应用与我的教学工作中,虽然最后交上来的答案都不是很理想,我且说,有兴趣的朋友自行实现:1、语言不限,最好是C/C++,Python封装的太好了,体现不出我们的水平2、输入一个字符串3、我要控制输入的为纯英文4、我要控制输入的为纯数字5、我要控制输入的可以有英文、数字、标点混搭6、基于以上3/4/5,我要控制输入长度一定7、我输错了要支持回删8、我要密文输入,不能在屏幕上显示我输入的是什么
这就是模板,错误输入将不被计数。
总好比屏幕上写一行:请输入英文、数字,然后我依旧可以随便输入,我输入一堆的标点,输入完跟我说输入不合法。不合什么法?不合法你允许我输入?我一直是这样做的。
那就这样。以前不知道怎么回事,觉得老师这样是多一举,现在知道了。这还是模板方法模式。为了保护封装性。
假设:
class A{ public: a(); b(); c();}
解决一个方案,需要依次调用abc,难道要在场景类里面:
A *AA = new A();AA->a();AA->b();AA->c();
?
还是
class A{ public: run(){ a(); b(); c(); }}int main(){ AA->run();}
你怎么看?
有的书或者教程会打着编程规范、编程艺术的幌子,跟你说变量定义统一写在函数的开头。在C语言里面才这样,不这样后面的变量将会无法分配资源,导致报错。但是C++并不这样。
你要清楚,一旦函数内部出现了分支,则有些对象可能根本不会有出镜的机会,那你那么急吼吼的定义它干嘛?
一旦涉及到变量定义,就会有构造和析构成本,不管它有没有被用上。
你不止应该尽可能延后变量的定义,最好延后到这个变量能够被赋值的那一刻。
当然,具体情况具体分析,如果遇到了循环中的临时变量,那另当别论。
循环无非两种情况,循环外定义和循环内定义:
1、1个构造函数+一个析构函数+n个赋值操作2、n个构造函数+n个析构函数
如果赋值的成本小于构造+析构的成本(变量不大),那就选择第一种方式。
这时候就看经验了。如果是你自己的转型操作,还是少做,尽量不做。
因为不同编译器,或者不同平台,它们可能不互认的。该用就得用呗,这要怎么降低?咱又不会吃饱撑着没事儿去引用一个用不着的头文件。
到这儿吧
转载地址:http://mfuvf.baihongyu.com/