C++与C语言的区别——C++是对C语言的扩展(一)
来源:互联网 发布:女生半袖图片淘宝 编辑:程序博客网 时间:2024/05/17 05:15
C++是最难的一门语言之一,这话绝对不是危言耸听!C++真的太难了。从本科大一的时候,就开始接触C和C++,也学了四、五年了,但是对C++的了解还是太肤浅,趁着研一的暑假(呵呵,哪里来的暑假?!大车埋土大学还真是个坑,不过没关系啦,只要胆子大,天天都放假!)~~言归正传,我想从头学习一下C++,提高自己的编程水平。给大家力荐一个网课(大家可以去腾讯课堂上面去搜),王桂林老师的——华为工程师 带你实战C++,确实非常棒!王老师讲课很有趣,很幽默,调理很清晰,逻辑很缜密。跟着老师实战,你绝对能学到好多知识。
这一部分内容,我参考王桂林老师的课程、C++Primer以及自己的思考。如下:
C++是带类的C语言,这个“++”主要包含三部分内容:对C语言进行语法上的扩展、面向对象(封装、继承和多态),STL(即模板)。
1、C++对C语言进行了类型增强
1)类型检查更严格
比如这样的代码:
#include <iostream>using namespace std;int main(){const int a = 100;a = 50;cout << a << endl;}
这段代码无论是在C中还是C++中,编译都通过不了。原因是:const 类型的值是不可以修改的.
但是呢,如下代码:
#include <iostream>using namespace std;int main(){const int a = 100;int *p = &a;*p = 50;cout << a << endl;}
把一个const类型指针赋值给非const类型指针,此例中,强行把const int * 赋值给int*,C语言是可以编译通过的(当然了,C语言不用cout),很明显,明修栈道暗度陈仓。但是,C++编译不通过。显然,C++做了数据类型增强,安全性更高。
相关说明:
1)congst 修饰谁的问题。const修饰谁,只需要把类型去掉即可。比如,const int a 与int const a 是一模一样的。此时,只需要把类型int 去掉,a是一样的。
再比如 int *const p,再把类型拿掉,const 修饰的是p ,p就不能改变了,但是p指向的内容是可以改变的.
如果是const int *const p,p不能改变,p指向的内容也不能改变。
2)在C语言中,const int a ;是可以编译通过的,a = 10;报错.原因:一旦在初始化的时候不赋值,以后就不能再赋值了。但是,在C++中,const int a ;编译不通过。因为在C++中,必须在定义的时候就给初始化。
第二个例子:如下代码
#include <iostream>#include <stdio.h>using namespace std;int main(){char *p = malloc(100); }
在C语言中,是可以通过的。但是在C++中,将void *赋值给char *,是不可以的,需要这样修改:
char *p =(char *) malloc(100);
2)C++增加了布尔类型
C语言中是没有布尔类型的,它表示真假的时候,用0和非0(注意,不仅仅是1)
C++中,bool类型有true和false,占一个字节。但是呢,给bool 赋其它数值,也是可以的。
其实,布尔类型的实现方式就是枚举。
3)真正的枚举
在C语言中,设计非常灵活。
enum Day {Mon,Tue,Wen};int main(){//enum Day today = Mon;enum Day today = 100;//在C语言中合法。C++不允许return 0;}
给枚举变量赋值,也可以赋数值。但是,在C++中是不允许的。
补充说明:
1)枚举和宏很相似。所以,在C++中,能用枚举,就用枚举不用宏。或者说,不用宏,能用const代替的就用const !!
4)表达式的值可以被赋值(表达式的值是左值)
int main(){int a, b = 10;a = b = 100;}
上述程序中,10 赋给b ,b=10这个表达式的值赋值给a,没问题,a= 10,b = 10。
但是,如果程序是这样的呢:
int main(){int a, b = 10;(a = b) = 100;//C语言中,这句话是错的,因为表达式不可以被赋值cout << a << endl << b << endl;}
此时,a =100,b = 10。是不是和你想的不一样呢?其实上述程序可以理解为两句代码:
a = b;a = 100;//()的优先级比 = 高
- C++与C语言的区别——C++是对C语言的扩展(一)
- C++与C语言的区别——C++是对C语言的扩展(二)——输入cin与输出cout
- OC基础回顾(一)Objective-C是对C语言的扩展
- c++对C语言的扩展(一)
- 百尺竿头更进一步——编译器gcc对c语言的扩展
- ARM编译器对C语言的扩展
- GCC 对C语言的扩展
- C++对C语言的扩展
- 初识C++——C语言与C++的区别
- c语言*与&的区别
- 2.2.2 GNU C对标准C语言的扩展
- C语言左值与右值的区别(C语言深度剖析读书笔记一)
- C++语言(二)——C++对C语言基础语法的扩展
- c++语言与C语言的区别
- GCC 对C语言的扩展(1)
- C++对C语言的扩展(二)
- Python 的C语言扩展
- gcc对C语言扩展
- 浅谈AC自动机(Aho-Corasick automaton算法)
- System.FormatException: 指定了无效的 IP 地址
- 内存溢出分析总结
- 【English】July's English Story
- markDown编辑器联系使用
- C++与C语言的区别——C++是对C语言的扩展(一)
- 应用程序组件
- monogdb 使用简要说明
- **Android三五行代码结局有滑块,可滑动的TABLE导航栏。类似斗鱼直播的直播页面导航栏,滑块可动态根据栏目宽度适应,无需自定义view** 先来说下思路把,很简单,一个HorizontalS
- Java-枚举应用总结
- Java开发中的23种设计模式详解
- SSH反向连接及Autossh
- Python读取中文路径时的处理
- window 7 平台上 MXNET 源码编译