当前课程知识点:C++语言程序设计基础 > 第2章 C++简单程序设计(一) > C++语言概述 > C++的特点和程序实例
C++的特点和程序实例
l 从C语言发展演变而来,最初被称为"带类的C";
l 1983年正式取名为C++;
l 1998年11月被国际标准化组织(ISO)批准为国际标准;
l 2003年10月15日发布第2版C++标准ISO/IEC 14882:2003;
l 2011年8月12日ISO公布了第三版C++标准C++11,包含核心语言的新机能、扩展C++标准程序库。
l 2014年8月18日ISO公布了C++14,其正式名称为"International Standard ISO/IEC 14882:2014(E) Programming Language C++"。
l C++14作为C++11的一个小扩展,主要提供漏洞修复和小的改进。
l 兼容C,支持面向过程的程序设计;
l 支持面向对象的方法;
l 支持泛型程序设计方法。
避免命名冲突
std是C++标准库的命名空间( namespace)名
using namespace std表示打开std命名空间
//2_1.cpp
#include <iostream>
using namespace std;
int main() {
cout << "Hello!" << endl;
cout << "Welcome to c++!" << endl;
return 0;
}
运行结果:
Hello!
Welcome to c++!
大家好
欢迎继续学习C++语言程序设计
现在我们来简单介绍一下
C++语言本身的特点
以及它的发展和起源
C++语言
最早是从C语言发展而来的
所以一开始
它就叫做带类的C
也就是说它最初是尽可能的继承
兼容了C语言的所有语法
然后在这个基础上
对类提供了支持
后来就被美国国家标准给定为了
C++语言
1983年 它正式取名为C++
到了1998年11月
就被国际标准化组ISO
批准为国际标准
2003年10月15日
发布了第二版的C++标准
那么到2011年8月12号
ISO又公布了第三版的C++标准
简称C++11
那么C++11标准呢
包含了核心语言机制的新的机能而且扩展了C++的标准库程序
那么到了2014年的8月18号
ISO又公布了C++14
C++14是个简称
它的正式名称是
International StandISO/IEC
148822014(E)Programming LanguageC++
那么C++14
其实只是在C++11的基础上
有一些小的扩展
主要是提供漏洞的修复
和小的改进
在我们这门课里
包括了C++新标准的
一些新的特性
那么如果说你选用的编译器
还不支持新标准的话
也没有关系
我们的大多数例题 习题
都还是跟以前版本的课程
和教材是一样的
在你旧的编译器上
大多数例题 习题
都是可以编译运行的
但是在课程内容中
我们将一些新标准中的特性
也介绍给大家
那么C++的特点是什么呢
首先它在开始阶段
它的初衷是尽量全面的兼容C
那么在这个基础上呢
它又支持面向对象的程序设计
所以由于
它对C语言的这种兼容性
使得C++就不是一个
完全的面向对象的程序语言
也就是说你用C++
不仅可以写面向对象的程序
也可以写面向过程的程序
那么到底你的程序
是需要面向过程的形式
还是面向对象的形式
那么可能你可以自己来决定
但是大多数情况下
显然面向对象的程序
它的封装性 它的可重用性
安全性都更好一些
所以建议大家既然学习C++
还是按面向对象的思想来写程序
下面我们就来看
这样一个程序实例
这个例题功能非常简单
我们首先看一下它的运行结果
它的效果就是输出两行字符串
到显示器上
一个Hello 一个Welcome
再看看这个程序里面
是怎么样实现这个功能的
好 看这个地方有一个main
后面跟一对圆小括号
再跟一对大括号
这个叫做主函数
也就是程序的主要模块
那看这个main后面
有一对圆括号
如果你要这个函数执行一些功能
有的函数就要你提供一些
供它计算所用的数据
这些叫做参数
在第三章我们会详细地讲
函数的参数
那么对于简单程序来说
只有一个主模块
也就是只有一个主函数的时候
这个主函数往往是不带参数的
那这个时候一对空的圆括号
还是要写在这儿的
再往后看 就是一对大括号
这一对大括号
是包围函数体的大括号
也就是说
这一对大括号之间的语句
我们叫这一行一行的这些文字
叫做语句
这些大括号之间的这些语句呢
就是我们写下的这个解决问题的
方法和步骤
给计算机去执行的
现在我们来看
我们是怎么样解决
将Hello和Welcome这两行文字
送到显示器上
我们是怎么解决这件事情的
那我们可以看到在前面有
cout这样一个名字出现
这是一个什么呢
这就是预定义好的类的对象
也就是说像显示器送数据
送信息这样的功能
是特别常用的功能
那么常用的功能
而且你自己写起来又挺麻烦的
这样编译器就带了它的函数库
类库 在这个类库里面
就有对于这种常用的
又比较麻烦的功能
它都跟你预定义好了
直接拿来用就行了
那么关于输入
输出的很多有用的功能
在随编译器带的这个库里面
都专门有输入输出的类
也就是每个输入输出相关的类
都集成了一组常用的
输入输出的功能
那么这个cout就是预定义好的
输出流类的一个对象
这一些我们在后面第11章
还会详细给大家讲
在第二章
也就是这一章的后面的内容
也会再给大家看很多例子
都是有信息的输入输出的
现在我们就记住cout
它是一个对象名
就像你有名字 我有名字
我们自然界中每一个对象
都有名字一样
这个专门负责像显示器送数据的
这样一个预定义好的对象
它也有个名字就叫cout
然后cout后面有一个
像两个连续的小于号
这样的符号
注意它不是一个书名号
是两个连续的小于号
这是什么呢
这是一个运算符
就像我们用加法
减法这种符号一样
这也是一个计算的符号
这是一个什么计算呢
这是一个流插入运算
也就是说要将后面这一串字符串
插入到输出流里面去
什么是输出流呢
在C1 C++语言看来
数据的输出就是信息的流动
输出流就是你程序空间
到外部设备之间的
这么一个信息流动的通道
我们需要向外部设备
送信息的时候
就要先建立一个能够流通信息的
这么一个通道
我们叫它一个输出流
而像显示器送信息的
这个流通道呢
是默认就打开好了的
负责向这个流里面
送数据的就是cout这个对象
它送数据这个动作
就是用这个连续两个小于号
这样的符号
叫做插入运算符来实现的
好 这个意思就是说
cout它要用这种插入运算符
将Hello这个字符串
送到显示器上去
送完了这一串以后呢
它又送一回
就会送了个什么
送了一个名字是endl
这是一个预定义好的符号
表示行结束
你送这么一个符号出去以后呢
这一行就结束了
我们看在运行结果的这个地方
Hello之后就换行了
更多的信息会在下一行再输出
那么再看下一行
做的也是类似的事情
又用了cout
这回像输出流送了Welcome
to c++ 还有惊叹号
这一串字符
那又像显示器送了一串字符
然后再次换行
最后有一句叫return0
return 返回
这个return0是什么意思呢
我们现在可以把它暂时记住它
在主函数的最后
都要写一个return0的
实际上这个return语句的作用是
返回这个函数的计算结果
如果这个函数是做一个数学计算
那它肯定是有计算结果的
这个计算结果为什么要返回呢
就是谁说
它要用这个函数作计算的
这个结果就会返回给谁
也就是说当你要用这个函数
完成一个任务的时候
你要调用它
调用完了结果呢
就返回给调用者
那么谁是主函数的调用者呢
应该运行环境
或者操作系统是主函数的调用者
但是我们主函数一般没有什么
数据需要返回给调用者
当然你有数据需要返回的时候
可以return一个有意义的数据
没什么需要返回的
默认情况下
我们都要应该return一个0
那么再往前看呢
在main前面有一个int
这是什么意思呢
这就是说规定
这个函数的计算结果它的返回值
应该是一个证书类型
int是整数integer的缩写
后面我们马上就要讲数据类型的
大家就会看到
规定着函数的返回类型
必须是一个整数值
那所以你没什么值可以返回
就返回个0
0也是个整数
这个就符合语法要求了
就是里int main圆括号空的
这个大家记住
主函数的开头就这样写法就行了然后呢
主函数要完成的所有的功能
依次写在这一对大括号里面
那么现在完成两件事情
依次把两个字符串
送到显示器上了
那最后呢 主函数的最后一句
一般来说都应该是个return0
在目前这个时候
你就这样记住
学着这样仿照着写就可以了
那以后我们会看到
主函数可不可以返回
一个不是0的有意义的数据呢
可以
主函数后面这对圆括号里面
可不可以不是空的
而是有参数的呢 也可以
以后都会见到这样的例子的
好 那么这样
貌似这个程序的功能就很完备了
但是仍然有问题
有什么问题呢
这个cout是个什么 谁能知道呢
你说那是C++语法规定的
它库里应该预先定义好的
一个对象
但是我们使用任何名字之前
都应该有个交代 有个说明的
比如说我们人与人见面的时候
那么总要两个人互相介绍一下
同样我们要用一个负责
向显示器输出的这样一个
有这样功能的一个对象
这个对象也应该在被使用之前
交代一下自己 它是什么
为什么要做这样的交代呢
因为编译器在做翻译的时候
它得知道这个名字代表着什么
在程序里面
我们叫做要声明一下
要做个declaration 要做个声明
那大家就有疑问了 怎么办呢
大家看这个程序的最开始的一行include #include iostream
进括号里面 iossteam
这是什么呢 这是包含
include是包含嘛
在这个位置
包含一个文件进来
iosstream是一个文本
文件的名字
它就是用来包括在
别的程序头上的
所以叫做头文件
它里面的内容是符合C++语法的
它的形式是纯文本的
就像我们写C++程序一样
在这个iostream这个文件里面呢
给出了你想使用的
预定义好的这些输入输出功能的相应地声明 相应地说明
所以你不用管应该如何去声明
这个cout
你只要把与它相关的
iostream这个文件 头文件
include进来就可以了
include它是一个编译预处理命令
所谓编译预处理命令呢
就是说在编译器开始做语法检查开始编译你这段时间之前
它首先要按照你的include指令
到约定的目录下
去找到iosteam这个文件
把这个文件的全部内容
复制粘贴到include语句
所在的这个位置
如果你想自己手动复制粘贴一下
看看是不是同样的效果
你也会发现效果是一样的
好 这个呢我们就明白了
经过这样一个include
这里面这个文件的文本里面
就包含了对cout的必要的声明
这个时候我们可以用cout了
是不是
那么为什么中间还有一行
using namespace std
这是什么内容呢
这个为什么这样呢
因为那么多的名字怕重名
我们说了C++标准库里面
预定义好了很多有用的功能模块
类 预定义的对象
函数等等这些
他们都是有名字的
那里面一个那么庞大的库
已经定义了那么多名字了
我们自己要写程序
一会我们看到
我们要定义变量名
以后还要定义函数名等等这些
我们自己要定义一些名字
那么名字会不会冲突呢
一想到起名字
大家肯定相信
你起名字难以避免冲突
但是在程序里面
如果你真的重名了
那是会引起错误的 不能重名
怎么解决这个问题呢
所有这个标准库里面的名字
它有一个共同的命名空间
这个命名空间的名字叫std
那么也就是说
我正经来用cout的时候
应该是std 然后后面有双冒号
表示作用域 分辨符
然后cout 有名有姓一块用
那如果说嫌麻烦 怕麻烦
我用每个名字
前面都得挂一个std
这个前缀太罗嗦了 那怎么办
你可以统一声明一下 好
现在打开std这个命名空间
using namespace std
这个命名空间一打开以后
这个命名空间里面所有名字
可以不带std这个姓了
直接叫名字就可以了
最开始还有上面双斜杠
2_1.cpp 这是什么东西
这是一个注释行
凡是以双斜线开头的行
都是注释行
编译器会忽略它的
把它当空白符
那么人看它会有用
会看到这个程序的原程序的名字
叫2_1.cpp 就这个意思
下面呢 我在这个编译环境中
给大家运行这个程序看一下
大家现在看到的呢
这个是
Visual studio Express2013的
这个编译环境
如果大家也愿意用这个
Visual studio来做开发环境的话
可以去官网上去下载
Express版都是免费的
好 那我们来看
这就是刚才那个程序
我要用这个呢 教一下大家
怎么编译和执行在这个环境中
那么要编译呢
去点这个菜单
底下可以有生成
那么可以生成解决方案
可以重新生成解决方案
那么可以在这点生成
实际上它就连编译带连接一起
就完成了 这个我已经编译过了
也可以单独编译 点这个编译
那么就只是单独编译一下
单独编译完了以后没有连接
它是没有生成可运行的程序的
那好 现在我们来看
如果说你想观察这个程序的
一步步的执行过程
你可以用什么呢
可以用单步执行
这有个调试菜单
调试菜单底下呢
大家看有启动调试
启动调试它就一次性
把程序都执行完
这个 它先编译了一下
就是以前编译的过期了
先编译了一下
好 启动调试
一下把程序都执行完
然后就回到这儿来了
我们也看不见执行结果了
这个时候
我说我想看一下执行结果
别那么快那个窗户就晃没了
怎么办呢
可以在这一句前面点一下
它有个原点了
在return这个地方点一下
就即将结束
即将return的时候点一下
这就是一个什么呢
设了一个断点
那你再去调试它
选这个启东调试菜单下
或者来看这个F5
你可以用F5
我按一下键盘上的F5
它同样开始执行了
那现在呢 我们来看
在这个控制台窗口里面
我们就看到两行信息现实在这儿
还来得及看
因为程序没有结束
我再一次按F5的话
它就程序执行完了
那么我们就看到了这个程序
它的运行结果是这个样子
如果说你这个程序里面有错
比如说我把这个分号删掉了
把这个分号删掉了
那我再去编一个它
比如说重新生成解决方案
也就重新要编译连接
那这个地方报错了
大家看在底下这个错误信息
这个地方就报错了
它就不给你声称可执行文件了
因为你有语法错
那么它指出这个错误
所在的地方了 我点这个错误号
那么它就停到错误所在这一行了
说这个 在这个标志符
这个名字cout之前
在这个名字cout之前缺少分号
确实这有个分号没写
那我就把这个分号呢
加在这个末尾的地方
这个就是西文的分号
加在末尾这个地方
然后再重新生成
现在就没有错误了
所以大家看
它生成了一个exe文件
就成功了 我们就可以执行了
-导学
--第1章导学
-计算机系统简介
--计算机系统简介
--计算机系统简介 测试题
-计算机语言和程序设计方法的发展
--计算机语言和程序设计方法的发展 测试题
-面向对象的基本概念
--面向对象的基本概念 测试题
-程序的开发过程
--程序的开发过程
--程序的开发过程 测试题
-信息的表示和储存
--计算机的数字系统
--数据的编码表示
--信息的表示和储存 测试题
-实验指导
-导学
--第二章导学
-C++语言概述
--C++语言概述 测试题
-基本数据类型、常量、变量
--程序举例
--基本数据类型、常量、变量 测试题
-运算与表达式
--运算与表达式 测试题
-实验二:简单程序设计(上)
-数据的输入和输出
--数据的输入和输出
--数据的输入和输出 测试题
-选择结构
--if语句
--switch语句
--选择结构 测试题
-循环结构
--for语句
--循环结构 测试题
-自定义类型
--自定义类型
--自定义类型
-第2章小结
--第二章小结
-实验二:C++简单程序设计(下)
-导学
--导学
-函数定义
--函数定义
--函数定义 测试题
-函数调用
--例3-2
--例3-3
--例3-4
--例3-5
--例3-6
--函数调用 测试题
-嵌套与递归
--例3-9
--例3-10
--嵌套与递归 测试题
-函数的参数传递
--函数的参数传递
--函数的参数传递 测试题
-引用类型
--引用类型 测试题
-含有可变参数的函数
--含有可变参数的函数 测试题
-内联函数
--内联函数 测试题
-constexpr函数
--CONSTEXPR函数课后习题
-带默认参数值的函数
--带默认参数值的函数 测试题
-函数重载
--函数重载 测试题
-C++系统函数
--C++系统函数习题
-第3章小结
--第三章小结
-实验三(上)函数的应用
-实验三(下)函数的应用
-导学
--导学
-面向对象程序的基本特点
--面向对象程序的基本特点 测试题
-类和对象
--类和对象的定义
--类和对象 测试题
-构造函数
--构造函数基本概念
--委托构造函数
--复制构造函数
--构造函数 测试题
-析构函数
--析构函数
--析构函数 测试题
-类的组合
--类的组合
--类的组合程序举例
--前向引用声明
--类的组合 测试题
-UML简介
--UML简介
--UML简介课后习题
-结构体与联合体
--结构体与联合体 测试题
-枚举类
--枚举类
--枚举类 测试题
-第4章小结
--第四章小结
-实验四(上)
--实验四(上)
-实验四(下)
--实验四(下)
-导学
--导学
-标识符的作用域与可见性
--标识符的作用域与可见性 测试题
-对象的生存期
--对象的生存期
--对象的生存期 测试题
-类的静态成员
--类的静态成员 测试题
-类的友元
--类的友元 测试题
-共享数据的保护
--共享数据的保护 测试题
-多文件结构和预编译命令
--多文件结构和预编译命令 测试题
-第5章小结
--小结
-实验五
--实验五
-导学
--导学
-数组的定义与初始化
--数组的定义与使用
--一维数组应用举例
--数组的定义与初始化 测试题
-数组作为函数的参数
--数组作为函数的参数 测试题
-对象数组
--对象数组
--对象数组 测试题
-基于范围的for循环
-指针的定义和运算
--指针的定义和运算 测试题
-综合实例
--综合实例
-实验六(上)
--实验六上
-指针与数组
--指针数组
--指针与数组 测试题
-指针与函数
--指针类型的函数
--指向函数的指针
--指针与函数 测试题
-对象指针
--对象指针
--对象指针 测试题
-动态内存分配
--动态内存分配 测试题
-智能指针
--智能指针
-vector对象
--vector对象
--vector对象 测试题
-对象复制与移动
--移动构造
--对象复制与移动 测试题
-字符串
--C风格字符串
--string类
--字符串 测试题
-第6章小结
--第六章小结
-综合实例
--综合实例
-实验六(下)
--实验六(下)