c++vstextouta怎么用_清小C面试记

本文以幽默的方式讲述了主人公清小C参加C++面试的经历,通过面试官的提问和对话形式介绍了C与C++的区别,以及使用两种语言实现同一功能的不同之处。

公元9102年11月28日,清小C心情兴奋而忐忑

cd6da988b766fbeba33a4065a2751986.png

昨天他收到了某互联网巨头公司的通知

今天他就要去面试了!

e4f5791e00c4a57ce30b87062177294e.png

昨晚他就上网搜索了好多面试注意事项

可谓万事俱备

5704fcb7b7b8f427b98a36c3b97ca354.png

不过他唯一有点担心的是他在简历里写了……

2529dceadedaa9e490f1e7a8f1d0af32.png

其实他也不知道怎样才算精通C++

不过本着“听过=了解,用过=熟悉”的原则

何况他还在书店里看过

《30小时精通C++》的封皮

那么写自己“精通C++”,不是问题!

0781bddd478997036fd3cc74af966c4b.png866fb6251a160552dcc203e4700aef20.png

来到面试的地点

面试官是个脑袋锃亮的大叔

他微笑着让清小C坐下

翻起了他的简历

052008d7a0a65ab58e99f6a0613e74c3.png

面试官

0b1560d99c846087e38f7e29c924a672.png

呦呵,你这里写的是精通C++是吧?

7879a0c7a0eccc0296650e1f64f8e1cc.png

嗯… 

(心里慌得不行,不会要露馅吧?)

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png0b1560d99c846087e38f7e29c924a672.png

(露出了诡异的微笑)那给你3分钟,先写个模板元编程实现的编译期堆排序吧。

7879a0c7a0eccc0296650e1f64f8e1cc.png

???

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

清小C露出了黑人问号脸:???

但也只能硬着头皮在纸上写下了:

#include

using namespace std;

int main(){

(中间不会了)

    return 0;

}

0b1560d99c846087e38f7e29c924a672.png

看来你不太懂模板啊,那我们来点简单的。来说说你觉得C和C++有什么区别吧。

7879a0c7a0eccc0296650e1f64f8e1cc.png

区别…在于艹的个数。

C++:C艹,

by the way,

C#:C艹艹。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png0b1560d99c846087e38f7e29c924a672.png

嗯哼?

7879a0c7a0eccc0296650e1f64f8e1cc.png

开个玩笑。

大概,C++就是带类的C吧…

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png0b1560d99c846087e38f7e29c924a672.png

哎,小伙子,你这样不行啊。建议你以后写简历,就写精通VS的安装与卸载,精通C++的拼写,精通Windows系统的开关机,这样真实且像你。

7879a0c7a0eccc0296650e1f64f8e1cc.png

嘤嘤嘤……

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png0b1560d99c846087e38f7e29c924a672.png

从你刚进来,你的秀发就已经出卖了你。你看,要像我这样的发型,说自己精通C++才有人信嘛,诶,等等,我发型呢…没事,这不重要。让我来告诉你C和C++的一些区别吧。以下是一些知识点,快拿小本本记下来。

7879a0c7a0eccc0296650e1f64f8e1cc.png

  ~小本本:

1.C语言诞生得比较早,当时的人们还习惯于汇编语言,而且也还没有比较统一、通用的操作系统,因此C语言可以看作是“高级的汇编语言”,比较贴近底层硬件,其目标就是比汇编语言更方便、易懂。

C++大大提高了抽象层次,支持模块化编程,有很多设计模式可以使用,提高了程序员的效率。而且支持泛型程序设计,还不会离硬件太远,非常适合用来写一些基础架构软件和大型软件。

2.C是面向过程的语言,而C++是面向对象的语言。C++中除了类与对象、继承、多态等OOP语言必备的内容,还支持模板、重载、异常处理等,还有一个功能强大的标准模板库STL。当然C++也支持C风格,也可以写面向过程的代码。

3.在动态内存管理上,C语言是通过malloc和free来进行堆内存的分配和释放,而C++是通过new和delete来管理堆内存的。

具体来说:

(1)malloc只负责开辟内存,用户需要自己初始化;而new不但开辟内存,还可以进行初始化。

(2)malloc函数开辟内存需要传入字节数,返回值需要强制转换成指定类型的地址;而new是运算符,开辟内存时需要指定类型,返回指定类型的地址,不需要进行强制转换。

(3)malloc开辟的内存都是通过free来释放的;而new出来的释放对应用的是delete,如果是数组,就用delete[]。

(4)malloc开辟内存失败返回NULL,而new开辟内存失败会抛出bad_alloc类型的异常。

4.C++比C多了一个类作用域。此外,C++支持namespace名字空间,可以由用户自己定义新的名字空间作用域,避免全局的名字冲突问题。

5.输入输出方式不一样。C的printf/scanf,和C++的cout/cin,前者是C的库函数,后者是ostream/istream类的对象。

0b1560d99c846087e38f7e29c924a672.png

(喝了一口水,说道)说了那么多,让我们举个例子看看。就比如说,有个任务,要造出一辆汽车,并把它开进车库。这时候用C和C++就很不一样。你先说说你打算怎么做吧。”

7879a0c7a0eccc0296650e1f64f8e1cc.png

太easy了,一共四步。造车,打开车库,把车开进去,关上车库。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png0b1560d99c846087e38f7e29c924a672.png

咳…咳…算了,你别再说话了。让我带着你看看用C和用C++的区别,编程时要善于和程序语言“对话”。就像这样。

7879a0c7a0eccc0296650e1f64f8e1cc.png

C是个高冷的DIY狂人,态度较为冷淡。如果你痴迷于DIY,什么都想靠自己做,我们一般只会用3个字来形容——C语言。不过当年他们大佬,在记事本里,拿机器语言写程序,那我用C写这么个小东西,不是问题。

c8b885748b257b45d6d228fde015b4b7.png

VS,启动!

Hi,C语言。我需要构造一辆汽车,并把它放进车库。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

C

哦。

7879a0c7a0eccc0296650e1f64f8e1cc.png

你能帮我做吗?

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

C

哦。

7879a0c7a0eccc0296650e1f64f8e1cc.png

那…怎么弄出一辆汽车呢?

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

C

DIY.

7879a0c7a0eccc0296650e1f64f8e1cc.png

(你只好百度一下,发现要malloc一片内存)

我要用malloc函数申请一块内存放汽车啦。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

C

哦。

7879a0c7a0eccc0296650e1f64f8e1cc.png

然后是构造汽车了,怎么办呢?

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

C

你猜。

7879a0c7a0eccc0296650e1f64f8e1cc.png

(于是你去翻阅了《汽车是如何造成的》)

我已经定义了一个汽车的数据结构,

然后呢?

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

C

继续猜。

7879a0c7a0eccc0296650e1f64f8e1cc.png

好吧,我再照猫画虎,

构造一个车库吧。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

C

哦。

7879a0c7a0eccc0296650e1f64f8e1cc.png

(于是你又去翻阅了《车库是如何建成的》)

车库也构造出来了呢,现在你帮我把汽车放进去吧。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

C

哼。

7879a0c7a0eccc0296650e1f64f8e1cc.png

(经过一通搜索,你终于找到了正确的方法)

好吧,都放进去了。现在输出一下看看。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

C

烫烫烫烫烫…

7879a0c7a0eccc0296650e1f64f8e1cc.png

哼,我去找C++玩了。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

C++比较年轻,平易近人。

C艹,帮我个忙好吗?

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

C艹

滚。

7879a0c7a0eccc0296650e1f64f8e1cc.png

(说好的平易近人呢?)

dbq,尊敬的C++先生,帮我构造一辆汽车并放进车库好吗?

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

C艹

好的呀。我这里有好多祖传的汽车类可以给你继承,有丰田、奥迪、宝马…你要是要迈巴赫、兰博基尼啥的也有啊。只要你认他们为爸爸,你就拥有了他们的一切,哦,除了构造函数和析构函数外。而且你还可以认好多好多爸爸…然后你还可以在此基础上自由发挥,弄点你自己的玩意出来。就好比,虽然爸爸已经很强大,但你总也得靠自己做点事情…

7879a0c7a0eccc0296650e1f64f8e1cc.png

emmm,我还是喜欢朴实无华一点的,随便来个国产牌子的汽车类吧,顺带车库类也随便来一个就行。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

C艹

ok.用new运算符来申请一块动态内存哦。

7879a0c7a0eccc0296650e1f64f8e1cc.png

好的,那现在来构造吧。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

C艹

你可以自己选择车型、最快时速、车身长宽、车重…这些参数,对了你有喜欢的颜色吗?可以直接上色哦,亲。

7879a0c7a0eccc0296650e1f64f8e1cc.png

呃…

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

(经过困难的选择后,你终于构造出了汽车和车库)

现在怎么放进去呢?

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

C艹

我选的这个车库类里有个AddCar函数,有接口的,你可以直接用。但是我没法告诉你它是怎么操作的。

7879a0c7a0eccc0296650e1f64f8e1cc.png

太好了,我正好不想知道。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

C艹

编译运行,我的速度极快呢。呃…等等,怎么报了100个错误…这是你的问题,你自己解决。

7879a0c7a0eccc0296650e1f64f8e1cc.png

“写bug三分钟,debug三小时”什么的最喜欢了!

三小时后,一辆国产的、最快时速200km/h、车身长4.5米、宽1.8米、重1.2吨、黑色的…红旗H5型小汽车就被放进了某国内建筑公司设计的、位于北京的、占地面积约为50平米…的小车库里。

好是好,就是太多选择了也是烦恼啊。我再去找找Python看。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

Python,帮我把汽车放进车库吧。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

Python

直接import这个“开车进库”的模块,然后run即可。

7879a0c7a0eccc0296650e1f64f8e1cc.png

哇,这么厉害的吗。给Python倒一杯卡布奇诺好吧,开始你的编程秀。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

半天后

小老弟,你怎么回事?Python你快点啊,这你也要弄半天吗?…

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

Python

哼,慢有慢的好…

7879a0c7a0eccc0296650e1f64f8e1cc.png

再见。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

(你又回到C那里,摆弄一番后,不禁感叹:)

Python真香!

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

在被各种语言摩擦了一番后

清小C决定去找大佬求助

清小C气喘吁吁地找到两位大佬

瘫坐在椅子上

d47799f63ab3827ea125d77b86072a8d.png

清先生,您好。

有什么事我们能帮到您?

7879a0c7a0eccc0296650e1f64f8e1cc.png

我要说的事

(停顿了一下)

你们千万别害怕。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

(两大佬战术后仰)

f5e049efb79ee199ef50381c92ade861.png

清先生,我们是大佬。

我们不会怕。

7879a0c7a0eccc0296650e1f64f8e1cc.png

我刚才,

又用C++写了3个小时Bug,

还找不出哪里错了。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.pngd47799f63ab3827ea125d77b86072a8d.png

C++是哪一位?

7879a0c7a0eccc0296650e1f64f8e1cc.png

不是哪一位,

就是那个面向对象的,

支持模板、重载、异常处理的,

自带标准模板库的C++啊!

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png027ebc5aef3731ee2351795f4665b7e1.png

大佬B在纸上写了一个C,并展示

比这多点儿。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png027ebc5aef3731ee2351795f4665b7e1.png

大佬B在C后面加上了#,再展示

比这少点儿。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png027ebc5aef3731ee2351795f4665b7e1.png

大佬B把纸转180°

又加了一竖

后面又写了个几个字母

(Python)

比这速度快点。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.pngd47799f63ab3827ea125d77b86072a8d.png

大佬A拿过纸

写下了加瓦

(Java)

(无奈摊手)C++啊,就是那种抽象程度很高的、程序猿都爱用的C++啊。它说我编程技术菜,试问谁不知道?它疯狂地给我报错,不给我编译运行,我还看不懂错哪了,每次都得花3小时以上看几行代码的bug…

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png4275834d5160cc3464e28659e7516ea6.png

大佬B忍不住笑了

你笑什么?

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png027ebc5aef3731ee2351795f4665b7e1.png

我想起高兴的事情。

7879a0c7a0eccc0296650e1f64f8e1cc.png

什么事?

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png027ebc5aef3731ee2351795f4665b7e1.png

我是项目经理,不用自己写代码。

7879a0c7a0eccc0296650e1f64f8e1cc.pngd47799f63ab3827ea125d77b86072a8d.png

大佬A也忍不住噗嗤一笑

你又在笑什么?

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.pngd47799f63ab3827ea125d77b86072a8d.png

我也是项目经理。

7879a0c7a0eccc0296650e1f64f8e1cc.png

你们都是给好多程序猿提要求的?

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png4275834d5160cc3464e28659e7516ea6.png

对…对

d47799f63ab3827ea125d77b86072a8d.png

喂!我再重申一遍!

我没在开玩笑!

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.pngd47799f63ab3827ea125d77b86072a8d.png

对…对…好…呵呵哈哈哈哈…

7879a0c7a0eccc0296650e1f64f8e1cc.pngf5e049efb79ee199ef50381c92ade861.png

(冷静下来)我们言归正传啊,你刚才说的这个C++,它好玩吗?

7879a0c7a0eccc0296650e1f64f8e1cc.png

它不是好不好玩的问题。它真的是那种,那种很少见的那种,每次编译都给你报几百个错误,看着你debug几个小时,de到忘乎所以、飘飘欲仙、最后头发都没了才肯罢休…

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png4275834d5160cc3464e28659e7516ea6.png

啊哈哈哈哈哈…

7879a0c7a0eccc0296650e1f64f8e1cc.png

你们欺人太甚!

一直笑我,都没停过。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.pngf5e049efb79ee199ef50381c92ade861.png

清先生,我们受过专业的训练。不管多好笑,我们都不会笑。除非忍不住。

7879a0c7a0eccc0296650e1f64f8e1cc.pngd47799f63ab3827ea125d77b86072a8d.png

不如这样,清先生,您先回去把VS卸了。我们这边商量一下看怎么办,再通知您好吗?

7879a0c7a0eccc0296650e1f64f8e1cc.png

行,那你们可得快点啊。

再多找几个大佬想想办法。

7879a0c7a0eccc0296650e1f64f8e1cc.pnga4dc36bf07fe8ea65931555a197e3e8b.png

清小C刚走,大佬A&B……

4275834d5160cc3464e28659e7516ea6.png

啊哈哈哈哈哈…

d47799f63ab3827ea125d77b86072a8d.png

清小C闻声回头

2db63d8770e5360c289d74bb21101b24.pngf5e049efb79ee199ef50381c92ade861.png

(保持严肃脸)清先生?

d47799f63ab3827ea125d77b86072a8d.png

清小C简直不敢相信这一切

骂骂咧咧地走了…

0e81bb283f265c51fb94bc6c9afdba77.png

走到楼梯上,突然打滑了…

0f8e38ab142f9aebf107f2b92ec3576d.png

于是,梦醒了,清小C呆呆地望着电脑上依旧不知从何下手的大作业和推送作业。世界归于平静,明天又将是新的一天……

5704fcb7b7b8f427b98a36c3b97ca354.png

【参考资料】

[1]优快云:C++经典面试题 | malloc和new的区别?

https://blog.youkuaiyun.com/weixin_39411321/article/details/89311059

编辑 | 张灿睿、李保罗

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值