内容:
(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++的区别的更多相关文章

  1. C++_基础_C与C++的区别2

    内容: (1)C++中的函数 (2)动态内存 (3)引用 (4)类型转换 (5)C++社区对C程序员的建议 1.C++中的函数1.1 函数的重载(1)重载的概念 在同一个作用域中,函数名相同,函数的参 ...

  2. python _、__和__xx__的区别

    python _.__和__xx__的区别 本文为译文,版权属于原作者,在此翻译为中文分享给大家.英文原文地址:Difference between _, __ and __xx__ in Pytho ...

  3. web前端学习python之第一章_基础语法(二)

    web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...

  4. web前端学习python之第一章_基础语法(一)

    web前端学习python之第一章_基础语法(一) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...

  5. SSM整合_年轻人的第一个增删改查_基础环境搭建

    写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...

  6. [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 ...

  7. _编程语言_C++_宏定义#define 和 常量const 的区别

    C++中有两种定义常量的方式:#define预处理和const关键字 #define 预处理指令 #include <iostream> using namespace std; #def ...

  8. 零基础逆向工程36_Win32_10_互斥体_互斥体与临界区的区别

    1 引言 讲了第二个内核对象,互斥体.前面已经学过一个内核对象,线程.这节讲两个函数,WaitForSingleObject()和WaitForMultipleObjects().因此这两个函数是根据 ...

  9. 3011C语言_基础知识

    第一章  基础知识 1.1  基本框架 //任何一个c语言程序都必须包括以下格式: int main(int argc, char *argv[] ) { : } //这是c语言的基本结构,任何一个程 ...

随机推荐

  1. 1.iOS第一个简单APP

    大纲: iOS系统发展 UI和OC 简单的APP程序 程序的生命周期   1.iOS的系统发展 从1983年OC程序开始发展到2015年,30多年的时间,但这依然不是一个十分完善的语言,可以说现在都没 ...

  2. 利用@media实现IE hack

    虽然对IE深恶痛绝,却不能拒绝. 使用@media实现IE hack的方法,以记之. 仅IE6和IE7识别@media screen\9 { .selector { property: value; ...

  3. vs2010中的外部依赖项的含义

    vs2010中的项目下拉列表下面有外部依赖项,里面显示的文件是你程序中显示包含的头文件所包含的的头文件.比如,你的main函数里面包含了windows.h头文件,而windows.h头文件又包含其他头 ...

  4. 多加注意对null和“”的处理

    程序中对一些需要再次取值的引用类型参数,在引用之前,请千万注意对空的判断.当不清晰返回结果是null还是""时,应先判断null,再判断空字符串. LOFTER:我们的故事   h ...

  5. java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file” .

    背景:java读取xml文件,xml文件内容只有“<?xml version="1.0" encoding="UTF-8"?>”一行 java读取该 ...

  6. sqlsever连接两个不同服务器上的数据库进行查询

    exec sp_addlinkedserver 'LocalSERVER' ,--别名,自己起一个 '' , 'SQLOLEDB' , 'ip' --远程服务器地址 exec sp_addlinked ...

  7. 搜索打表大找规律 (hdu2045)

    不容易系列之(3)—— LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  8. RenderPartial RenderAction Partial Action

    MVC Razor中有不同的展现partial view的方法,许多开发人员子在选择使用 RenderPartial or RenderAction or Partial or Action help ...

  9. [TYVJ] P1065 津津的储蓄计划

    津津的储蓄计划 背景 Background NOIP2004 提高组 第一道   描述 Description     津津的零花钱一直都是自己管理.每个月的月初妈妈给津津300元钱,津津会预算这个月 ...

  10. Java中的深复制与浅复制

    1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不 复制它所引用的对象. ...