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语言的基本结构,任何一个程 ...
随机推荐
- 通过XSLT转换XML
Hello,every body.又与大家见面了,哈哈.今天我与大家分享一下XSLT,XSL,XML,XPath.因为项目中有些功能用到了XSLT.XML等技术.所以今天好好研究了一下这几个方面的技术 ...
- MFC让控件随窗口大小而改变
转载自http://blog.csdn.net/chw1989/article/details/7488711 大小和位置都改变(亲测可行) 1.首先为窗体类添加CRect m_rect,该成员变量用 ...
- TexturePacker文件的反向解析-TextureUnpacker
最近在使用cocos2d-x做开发,其中会用到TexturePacker工具打包纹理文件,但是有时候想从打包好的.plist和.png大图文件反向生成原始的小图文件,TexturePacker好像没有 ...
- (原)调用jpeglib对图像进行压缩
网址:http://www.cnblogs.com/darkknightzh/p/4973828.html.未经允许,严禁转载. 参考网站: http://dev.w3.org/Amaya/libjp ...
- 利用反射动态构成sql语句
class Program { static void Main(string[] args) { People p = new Peo ...
- putty设置
1- 输入要链接的主机地址 2- 设置connection-->SSH-->Tunnels 点击Add 3- 设置connection 修改为30 4- 点击open,出现ssh登陆,输入 ...
- dojo Tree 添加、删除节点
var tree=this.tree; var store=tree.model.store; if(this.node){ console.log(this.node) var children=t ...
- 使用DBUtils小框架
DBUtils对sqlserver好像支持不怎么好,经常出现问题 比如 三月 14, 2015 10:19:32 上午 com.mchange.v2.log.MLog 信息: MLog clients ...
- Super Jumping! Jumping! Jumping!(hdu 1087 LIS变形)
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- 利用fiddler录制脚本
特性说明: 版本:V4.4 用途:将fiddler抓取的请求,导出为jmx格式,方便jmeter直接调用 新增功能: 1.在测试计划下,新增[HTTP请求默认值],内容为空,后续需将站点的IP和端口填 ...