C++经典面试题 | C和C++的区别是什么?

10 篇文章 0 订阅

导语:

大家求职简历上肯定会写精通C和C++语言之类的词语,所以,这个问题被问到的概率也是相当高的,请大家提前准备下该怎么表达!

解题思路:

面试中如果要和面试官谈C和C++的区别这样的问题,那么尽量先从轮廓上谈一些他们大方向上的差别,然后等着面试官再和你仔细的询问某个知识点的细节,切忌一上来就喋喋不休,没个逻辑,想到哪里说到哪里,这样不行,因为它们之间的区别点还是非常多的!

针对这个问题,你可以先思考一下,然后给出诸如下面的内容:

C是面向过程的语言,而C++是面向对象的语言,因此C++语言中有类和对象以及继承多态这样的OOP语言必备的内容,此外C++支持模板,运算符重载,异常处理机制,以及一个非常强大的C++标准模板库STL,另外一个Boost库现在也归属C++标准库,提供了很多强大的功能。

C只能写面向过程的代码,而C++既可以写面向过程的代码,也可以实现面向对象的代码;既然C++是面向对象的OOP语言,因此它还有非常强大的设计模式,比如单例,工厂,观察者模式等等,这些在C语言当中都是不支持的。

C和C++一个典型的区别就在动态内存管理上了,C语言通过malloc和free来进行堆内存的分配和释放,而C++是通过new和delete来管理堆内存的(至于new/malloc有什么区别,delete/free有什么区别,你等面试官来继续深入问你,先从大方向上罗列区别,让他感受一下你只是的全面性^^)

另外强制类型转换上也不一样,C的强制类型转换使用()小括号里面加类型进行类型强转的,而C++有四种自己的类型强转方式,分别是const_cast,static_cast,reinterpret_cast和dynamic_cast(一样,等面试官来深入问你,前提是这块你准备好了,如果没有理解他们的使用场景和区别,那么这一点你还是不要说了!)

C和C++的输入输出方式也不一样,printf/scanf,和C++的cout/cin的对别,前面一组是C的库函数,后面是ostream和istream类型的对象。

C++还支持带有默认值的函数,函数的重载,inline内联函数,这些C语言都不支持,当然还有const这个关键字,C和C++也是有区别的,但是这都是目前最常用的C89标准的C内容,在C99标准里面,C语言借鉴了C++的const和inline关键字,这两方面就和C++一样了。

由于C++多了一个类,因此和C语言的作用域比起来,就多了一个类作用域,此外,C++还支持namespace名字空间,可以让用户自己定义新的名字空间作用域出来,避免全局的名字冲突问题。

C++不仅支持指针,还支持更安全的引用,不过在汇编代码上,指针和引用的操作是一样的

由于C++是面向对象的语言,支持类对象,类和类之间的代理,组合,继承,多态等等面向对象的设计,有很多的设计模式可以直接使用,因此在设计大型软件的时候,通常都会采用面向对象语言,而不会采用面向过程语言,可以更好的进行模块化设计,做到软件设计的准则:高内聚,低耦合!

在C++中,struct关键字不仅可以用来定义结构体,它也可以用来定义类(至于C++中struct和class的区别,请大家自行翻阅资料)

当然C和C++还有更多的区别,希望大家可以自行再补充

c和c++的内存分布有什么区别?

C和C++程序运行时的内存分布式一样一样的,但是他们管理堆内存的方式是有区别的,那请大家自己先想想new/malloc有什么区别?delete/free有什么区别这两个问题,另外,new分配内存失败是抛出异常的,而不是通过返回值和NULL比较进行判断的,请注意!

可以参照我的另外两篇博客
malloc和new的区别? https://blog.csdn.net/weixin_39411321/article/details/89311059
new/new[]和delete/delete[]的区别原理 https://blog.csdn.net/weixin_39411321/article/details/89310651

  • 30
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 您提到了一些关于C和C++的编程问题和示例代码。对于嵌入式C和C面试题,我可以为您提供一些常见的问题和答案。 1. 请解释C和C++之间的区别。 C和C++是两种不同的编程语言。C是一种面向过程的编程语言,主要用于系统级编程和嵌入式开发。C++是一种面向对象的编程语言,是C的扩展,具有更多的特性和功能。 2. 请解释const关键字在C和C++中的区别。 在C语言中,const关键字用于定义常量,但实际上它仍然是一个变量,不像在C++中,const修饰的变量可以视为真正的常量。在C语言中,const修饰的变量在编译时被分配内存,而在C++中,const修饰的变量可能在编译时被优化掉。 3. 请解释逗号表达式的运算结果。 在给定的代码示例中,逗号表达式`(x%y, x/y)`的运算结果是`x/y`的值。逗号操作符会依次执行表达式,并返回最后一个表达式的值作为整个逗号表达式的值。 4. 请解释多态。 多态是面向对象编程中的一个重要概念,它允许不同的对象对相同的消息作出不同的响应。在给定的代码示例中,通过使用函数指针,可以实现不同类型的人调用相同的函数,但会执行不同的操作。这就是多态的体现。 请注意,以上是对您提供的代码和问题的简要回答。如果您有任何进一步的问题或需要更详细的解释,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [嵌入式 C语言/C++ 常见笔试、面试题 难疑点汇总(经典100道)](https://blog.csdn.net/Dustinthewine/article/details/128088891)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值