C++面经总结之《Effective C++》(二)

在这里插入图片描述

前言

今天和老大哥们聚会,又接触了不少新事物。
争取今天把这个系列整理完,最近信息有点太多了,分析不过来了。先屯着,慢慢发。
请大家给我点时间,我缓一下。

接下来,将会有大动作了。


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++并不这样。

你要清楚,一旦函数内部出现了分支,则有些对象可能根本不会有出镜的机会,那你那么急吼吼的定义它干嘛?

一旦涉及到变量定义,就会有构造和析构成本,不管它有没有被用上。

你不止应该尽可能延后变量的定义,最好延后到这个变量能够被赋值的那一刻。


当然,具体情况具体分析,如果遇到了循环中的临时变量,那另当别论。

循环无非两种情况,循环外定义和循环内定义:

11个构造函数+一个析构函数+n个赋值操作
2、n个构造函数+n个析构函数

如果赋值的成本小于构造+析构的成本(变量不大),那就选择第一种方式。
这时候就看经验了。


27、尽量少做转型动作

如果是你自己的转型操作,还是少做,尽量不做。
因为不同编译器,或者不同平台,它们可能不互认的。


31、将文件间的编译依存关系降至最低

该用就得用呗,这要怎么降低?咱又不会吃饱撑着没事儿去引用一个用不着的头文件。


到这儿吧

已标记关键词 清除标记
相关推荐
本科是学电子的,除了C语言,单片机,微机原理学的不错,其他计算机相关的就都只会皮毛了。考研时考到计算机嵌入式实验室,然后开始狂看书,中途还看了N多blog文。以下顺便列一下最近两年看的书: 《C和指针》 《C专家编程》 《C陷阱与缺陷》 《数据结构基础(C语言版)》 《深入理解计算机系统》 《Unix操作系统设计》 《Unix环境高级编程》 《Unix 网络编程》 《Linux内核设计与实现》 《理入理解Linux系统》 《Linux设备驱动程序》 《Linux设备驱动开发详解》 《ARM嵌入式系统基础教程》 《ARM嵌入式系统实验教程()》 《ARM嵌入式系统软件开发实例(一)》 《ARM嵌入式Linux系统构建与驱动开发范例》 《ARM嵌入式MiniGUI初步与应用开发范例》 《嵌入式实时操作系统--μC/OS-Ⅱ,第2版》 《基于嵌入式实时操作系统的程序设计技术》 《ARM嵌入式系统开发-软件设计与优化》 《C++ Primer》 《深度探索C++对象模型》 《effective C++》 《软件优化技术--IA-32平台的高性能手册(第2版)》 《多核程序设计——通过软件多线程提升性能》 《程序员试宝典》 《TCP/IP 详解 (卷一)》 《嵌入式Linux应用开发完全手册》 《新一代视频压缩编码标准——H.264/AVC》 《跟我一起写makefile》 《μClinux源代码中Make文件完全解析——基于ARM开发平台》 《人月神话》 以上的书90%我是看完了的,一小部分只看了一半,而且大部分书我都买了,图书馆实在借不到,以下是最近在看或计划要看的书: 《more effective C++》 《headfirst设计模式》 《大话设计模式》 《STL源码剖析》 《敏捷软件开发:原则、模式与实践》 《算法导论》 《数据结构与算法分析C++描述(第三版)》 看书有方法,首先必须选最经典易读的书,差的书不仅误导人,还打击自信心,其次读书时,一定要多想多实践,透过现象看本质,古人云“学而不思则罔,死而不学则殆”,最后,读书一定要一鼓作气,一本书如果放一段时间在读,就必须得从头再来了。 很多TX静不下心来看书,看到一本上千页的书就崩溃了。最开始我也是这样,但是在大考认证时(微软的MCSE/MCDBA),当时要考七门,每门的教材都上千页,但是报名交了钱,为了钱于是强迫自己疯狂的看书,当时最疯狂的时候一天最多能看100也书,早上30页,中午30页,晚上40页,平均一小时10页。当时考的那个认证虽然现在没用了,但是经过那段时期的疯狂,哥以后无论看到多厚的书都很淡定。现在看书,平均每天也能看30页左右。所以,静不下心的兄弟们可以学我,经历一些大风大浪O(∩_∩)O~
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页
实付 29.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值