C++基础基础:C与C++的差异
发布时间:2021-12-10 19:26:30 所属栏目:教程 来源:互联网
导读:内容: (1)C++简介和编程的基本变化 (2)命名空间的概念和使用 (3)结构体、联合、枚举的不同 (4)布尔类型 以及 运算符别名 (5)函数的重载、缺省参数、哑元以 及内联 1.简介和编程的基本变化 1.1 C语言的简介 1969年,使用汇编语言编写操作系统,汤普逊 发明了
内容: (1)C++简介和编程的基本变化 (2)命名空间的概念和使用 (3)结构体、联合、枚举的不同 (4)布尔类型 以及 运算符别名 (5)函数的重载、缺省参数、哑元以 及内联 1.简介和编程的基本变化 1.1 C语言的简介 1969年,使用汇编语言编写操作系统,汤普逊 发明了一门语言 B语言,丹尼斯-里奇 在B语言的基础上 New B语言,后来改名为C语言 C语言 出生于 1972年 1.2 C++语言的简介 在C语言的基础上,本贾尼-斯特劳斯特卢普(Bjarne Stroustrup)做了一定的扩展,起名 New C语言,后来改名为“C with Classes(带类的C)”,想到了C语言中的运算符 ++, 最后改名为C++,于1983年诞生 1.3 相关的历史事件 (1)1983年, C++语言诞生 (2)1985年,CFront1.0 第一个C++编译器诞生 (3)1987年,GNU C++编译器 (4)1990年,Borland C++ (5)1992年,Microsoft C++ (6)1998年,第一个ISO C++标准诞生 (vc6.0 1998年诞生) (7)2003年,ISO对C++标准做了修改,C++03标准 (8)2011年,最新的C++标准,C++11或者C++0x (部分编译器支持) 1.4 C++和C语言的比较 (1)C++和C语言都是编译型语言,也就是只有编译之后才能运行的,有些是不需要编译就可以直接运行的,是通过解释器执行的,这种语言叫脚本语言 vi xxx.sh date;cal;ls -l; (2)C++和C语言都是强类型语言,所有的标示符都必须有数据类型 a; a = 10; //error (3)C++对C语言提供兼容,并且做了优化提供了更多的特性 a.语言风格更加简洁 b.类型检查更加严格 // error int* pi = malloc(sizeof(int)); c.支持面向对象编程 d.支持运算符重载 1+1 = 2 一个人 + 10 e.支持异常处理 f.支持泛型编程 double float ... 1.5 C++的主要用途 (1)用于游戏开发 (2)用于系统和驱动开发 C++ 没有C语言更加底层,也没有Java/C#更加偏向应用级 网站技术:javaWeb/.net/PHP 编写第一个C++程序 1.6 编程的基本变化 (1)文件的扩展名发生变化 C语言中源文件: xxx.c C++中源文件:.C/.cc/.cxx/.cpp(plus plus) C语言中头文件: xxx.h C++中头文件: xxx.hpp / xxx.h (2)头文件的变化 C语言中: #include <stdio.h> C++中: #include <iostream> 使用C语言中头文件: #include <cstdio> 去掉.h,前面加c vi /usr/include/c++/4.6/cstdio文件中包含的还是 stdio.h文件 (3)输入输出的变化 C语言中:scanf/printf 函数 C++中:cin/cout 对象 (4)编译器的变化 C语言中:gcc/cc xxx.c C++中: g++/c++ xxx.cpp gcc/cc xxx.cpp -lstdc++ g++/c++ 的编译选项和 gcc/cc一样 -c 只编译不连接 -S 生成汇编文件 -o 指定输出文件名 -O 优化 ... (5)命名空间 using namespace std; 使用标准命名空间,标准库中类以及函数等全部放在std的命名空间中 2.命名空间的学习和使用 引入了命名空间(namespace)的概念,主要用于区分同名的函数、变量等 2.1 自定义命名空间 namespace 命名空间名字 { 变量、函数等 } 注意: 和结构体的格式非常相似,但是关键字不同,并且没有分号,用于作用域的限定,并不是一种独立的数据类型 :n1,n2 > 表示将n1行到n2行之间的代码向右缩进 :n1,n2 < 表示将n1行到n2行之间的代码向左缩进 2.2 使用名字空间的方式 (1)使用名字空间指令的方式使用命名空间 如: using namespace std; (2)使用作用域限定符 :: - 作用域限定符,相当于"的" 如: std::cout << "大家好才是真的 好"; (3)使用名字空间声明的方式去使用名字空间中的部分内容 如: using std::cout; using std::endl; cout << "大家好才是真的好" << endl; 2.3 无名名字空间 如果一个标示符没有被置于任何名字空间中,则默认为无名/匿名名字空间中,可以使用如下形式去访问标示符: ::无名名字空间成员名 2.4 扩展 (1)同一个命名空间中的内容可以分开写 (2)命名空间中的函数声明和定义也可以分开,也就是函数的定义可以放在命名空间的外面 (3)命名空间可以进行嵌套 3.结构体、联合、枚举的不同 3.1 结构体中的不同 C语言中: struct Student/*结构体类型名 */{ ... }; struct Student/*左边整体作为一 个完整的数据类型*/ s; typedef struct Student { ....}Student/*别名*/; typedef struct {....}Student/*别名*/; C++中: struct Student{...}; [struct] Student s; (1)C++中的结构体定义变量时可以省略struct关键字 (2)C++中的结构体内部可以定义函数,并且函数内使用成员变量时不需要. ->之类的 注意: (1)在C语言中如果一个函数的形参表为空时,表示可以接受任意多个任意类型的实参 (2)在C++中如果一个函数的形参表中为空时,表示不接受任何实参 思考: 为什么s和s2调用的是同一个show函数而打印出来的数据内容却不一样?? (以后讲到) 3.2 联合的不同之处 (1)定义联合变量的时候可以省略union关键字 (2)支持匿名联合 如: union un/*un是联合类型名*/{..}; [union] un u; union{...}; 匿名联合 3.3 枚举的不同之处 (1)枚举类型在定义变量时也可以省略enum关键字 (2)C语言的枚举 本质上就是整型,可以使用整数进行赋值 C++中的枚举 是一种独立的数据类型,不能使用整数进行赋值 (int类型的值域 比 枚举类型的大) 4.布尔类型以及运算符的别名 4.1 布尔类型 C语言中: bool #include<stdbool.h> int C++中: bool类型是C++中的基本数据类型,bool类型的值有两个:true 和 false,其本质上就是 1 和 0 bool类型本质上就是一个单字节整数,任何基本数据类型都可以被隐式地转换为bool类型 小结: bool类型定义变量,可以作为函数的参数和返回值类型,当然也可以定义指针类型 4.2 运算符别名 && & | || ^ 异或运算符 不同为真,相同为假 作业: 查询手册string类型中的各种函数,尝试着去使用string类型中的各种函数 如: string s; s.c_str(); ![]() (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |