C++面经总结之《Effective C++》(二)
【摘要】
文章目录
前言13、智能指针18、让接口更容易被正确使用,不易被误用22、将成员变量声明为private23、以non-member、non-friend替换member函数26、尽可能延后变量定义式的出现时间27、尽量少做转型动作31、将文件间的编译依存关系降至最低
前言
今天和老大哥们聚会,又接触了不少新事物。 争取今天把这个系列整理完,最近...
前言
今天和老大哥们聚会,又接触了不少新事物。
争取今天把这个系列整理完,最近信息有点太多了,分析不过来了。先屯着,慢慢发。
请大家给我点时间,我缓一下。
接下来,将会有大动作了。
13、智能指针
我就不多说,直接用。
18、让接口更容易被正确使用,不易被误用
中间跳过一波,不为啥,看不懂。
这个条款让我想起了“模板方法模式”,但是我讲不清楚这个模式,倒不是讲不清楚该怎么用,就是讲不清楚有什么用。现在又知道一个用法了。
就拿我做的第一个小demo来说,是一个输入输出控制函数。
这个demo也被广泛的应用与我的教学工作中,虽然最后交上来的答案都不是很理想,我且说,有兴趣的朋友自行实现:
1、语言不限,最好是C/C++,Python封装的太好了,体现不出我们的水平
2、输入一个字符串
3、我要控制输入的为纯英文
4、我要控制输入的为纯数字
5、我要控制输入的可以有英文、数字、标点混搭
6、基于以上3/4/5,我要控制输入长度一定
7、我输错了要支持回删
8、我要密文输入,不能在屏幕上显示我输入的是什么
这就是模板,错误输入将不被计数。
总好比屏幕上写一行:请输入英文、数字,然后我依旧可以随便输入,我输入一堆的标点,输入完跟我说输入不合法。不合什么法?不合法你允许我输入?
22、将成员变量声明为private
我一直是这样做的。
那就这样。
23、以non-member、non-friend替换member函数
以前不知道怎么回事,觉得老师这样是多一举,现在知道了。这还是模板方法模式。为了保护封装性。
假设:
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();
}
你怎么看?
26、尽可能延后变量定义式的出现时间
有的书或者教程会打着编程规范、编程艺术的幌子,跟你说变量定义统一写在函数的开头。在C语言里面才这样,不这样后面的变量将会无法分配资源,导致报错。但是C++并不这样。
你要清楚,一旦函数内部出现了分支,则有些对象可能根本不会有出镜的机会,那你那么急吼吼的定义它干嘛?
一旦涉及到变量定义,就会有构造和析构成本,不管它有没有被用上。
你不止应该尽可能延后变量的定义,最好延后到这个变量能够被赋值的那一刻。
当然,具体情况具体分析,如果遇到了循环中的临时变量,那另当别论。
循环无非两种情况,循环外定义和循环内定义:
1、1个构造函数+一个析构函数+n个赋值操作
2、n个构造函数+n个析构函数
如果赋值的成本小于构造+析构的成本(变量不大),那就选择第一种方式。
这时候就看经验了。
27、尽量少做转型动作
如果是你自己的转型操作,还是少做,尽量不做。
因为不同编译器,或者不同平台,它们可能不互认的。
31、将文件间的编译依存关系降至最低
该用就得用呗,这要怎么降低?咱又不会吃饱撑着没事儿去引用一个用不着的头文件。
到这儿吧
文章来源: lion-wu.blog.csdn.net,作者:看,未来,版权归原作者所有,如需转载,请联系作者。
原文链接:lion-wu.blog.csdn.net/article/details/115033379
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)