内容:
(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. Mock测试框架

    一.前言 使用Mock框架进行单元测试,能够使用当前系统已经开发的接口方法模拟数据.(未写完,慢慢完善) 二.例子 1.引用Moq

  2. Webfrom基础知识

    MyBeNASP.NET内置对象 (1)简述ASP.NET内置对象. 答:ASP.NET提供了内置对象有Page.Request.Response.Application.Session.Server ...

  3. (原)ippicvmt.lib(ippinit.obj) : error LNK2005: _ippSetCpuFeatures@8 已经在 ippcoremt.lib(ippinit.obj) 中定义

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5497234.html 参考网址: http://answers.opencv.org/question ...

  4. Wordpress更换主题之后出错

    今天吃完午饭,休息休息,最近搞了一下google adsense,不过最终的审核没通过,我想会不会是界面不好看呢,饭后就在电脑旁,更换了几个wordpress主题,我的博客使用wordpress搭建的 ...

  5. mybatis_Generator配置

    mybatis-generator-core-1.3.2 <?xml version="1.0" encoding="UTF-8"?> <!D ...

  6. 数据库操作CURD

    JDBCCURD操作实例 19. 五 / J2EE / 没有评论   代码目录结构: domain   javabean: util   工具类  jdbcUtil是连接数据mysql数据库的工具类 ...

  7. 安装setuptools和pip

    什么是setuptool和pip python的强大在于它有许许多多的包,当我们要用到这些包时,一个一个的从官网下载安装就太麻烦了,setuptools和pip就提供了下载安装第三方包的功能.pip是 ...

  8. html 标签释义

    position  位置  给....定位   作用:定位 position:fixed  锁定游览器位置 如右下角弹窗 absolute  绝对定位    游览器左上角      position: ...

  9. JSONP跨域的原理

    一种脚本注入行为 在 2011年10月27日 那天写的     已经有 12671 次阅读了 感谢 参考或原文   服务器君一共花费了23.005 ms进行了2次数据库查询,努力地为您提供了这个页面. ...

  10. 前端MVVM学习之KnockOut(一)

    MVVM理解 MVVM即Model-View-viewModel,是微软WPF和MVP(Model-View-Presenter)结合发展演变过来的一种新型架构框架. MVVM设计模式有以下优点: ( ...