C++_基础_C与C++的区别
内容:
(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();
C++_基础_C与C++的区别的更多相关文章
- C++_基础_C与C++的区别2
内容: (1)C++中的函数 (2)动态内存 (3)引用 (4)类型转换 (5)C++社区对C程序员的建议 1.C++中的函数1.1 函数的重载(1)重载的概念 在同一个作用域中,函数名相同,函数的参 ...
- python _、__和__xx__的区别
python _.__和__xx__的区别 本文为译文,版权属于原作者,在此翻译为中文分享给大家.英文原文地址:Difference between _, __ and __xx__ in Pytho ...
- web前端学习python之第一章_基础语法(二)
web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...
- web前端学习python之第一章_基础语法(一)
web前端学习python之第一章_基础语法(一) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...
- SSM整合_年轻人的第一个增删改查_基础环境搭建
写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...
- [19/06/03-星期一] HTML基础_C/S与B/S的区别&标题标签(h1-h6)、段落标签(p)
一.C/S与B/S的区别 C/S(Client/Server):客户端/服务器 1)一般使用的软件都是C/S架构,比如QQ.360.office365: 2)C表示客户端,用户通过客户端来使用软件:S ...
- _编程语言_C++_宏定义#define 和 常量const 的区别
C++中有两种定义常量的方式:#define预处理和const关键字 #define 预处理指令 #include <iostream> using namespace std; #def ...
- 零基础逆向工程36_Win32_10_互斥体_互斥体与临界区的区别
1 引言 讲了第二个内核对象,互斥体.前面已经学过一个内核对象,线程.这节讲两个函数,WaitForSingleObject()和WaitForMultipleObjects().因此这两个函数是根据 ...
- 3011C语言_基础知识
第一章 基础知识 1.1 基本框架 //任何一个c语言程序都必须包括以下格式: int main(int argc, char *argv[] ) { : } //这是c语言的基本结构,任何一个程 ...
随机推荐
- 1.iOS第一个简单APP
大纲: iOS系统发展 UI和OC 简单的APP程序 程序的生命周期 1.iOS的系统发展 从1983年OC程序开始发展到2015年,30多年的时间,但这依然不是一个十分完善的语言,可以说现在都没 ...
- 利用@media实现IE hack
虽然对IE深恶痛绝,却不能拒绝. 使用@media实现IE hack的方法,以记之. 仅IE6和IE7识别@media screen\9 { .selector { property: value; ...
- vs2010中的外部依赖项的含义
vs2010中的项目下拉列表下面有外部依赖项,里面显示的文件是你程序中显示包含的头文件所包含的的头文件.比如,你的main函数里面包含了windows.h头文件,而windows.h头文件又包含其他头 ...
- 多加注意对null和“”的处理
程序中对一些需要再次取值的引用类型参数,在引用之前,请千万注意对空的判断.当不清晰返回结果是null还是""时,应先判断null,再判断空字符串. LOFTER:我们的故事 h ...
- java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file” .
背景:java读取xml文件,xml文件内容只有“<?xml version="1.0" encoding="UTF-8"?>”一行 java读取该 ...
- sqlsever连接两个不同服务器上的数据库进行查询
exec sp_addlinkedserver 'LocalSERVER' ,--别名,自己起一个 '' , 'SQLOLEDB' , 'ip' --远程服务器地址 exec sp_addlinked ...
- 搜索打表大找规律 (hdu2045)
不容易系列之(3)—— LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- RenderPartial RenderAction Partial Action
MVC Razor中有不同的展现partial view的方法,许多开发人员子在选择使用 RenderPartial or RenderAction or Partial or Action help ...
- [TYVJ] P1065 津津的储蓄计划
津津的储蓄计划 背景 Background NOIP2004 提高组 第一道 描述 Description 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津300元钱,津津会预算这个月 ...
- Java中的深复制与浅复制
1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不 复制它所引用的对象. ...