一、C++语言的发展简史
根据是否可以直接操纵计算机底层硬件,将程序设计语言分为低级语言
、中级语言
和高级语言
。
机器语言和汇编语言都属于低级语言,能够直接操纵计算机的寄存器和内存。
机器语言是使用机器指令的二进制代码编写程序,能够直接被计算机识别。
汇编语言使用能够代表指令的助记符来编写程序,可以看作是符号化了的机器语言。
高级语言是面向用户的语言。C++属于高级语言。
在83年之前被称为带类的C语言。C语言是C++语言的前身。
98年,C++的ANSI/ISO标准被投入使用,并在03年、11年、14年和17年发布了第二版、第三版、第四版和第五版。
二、C++语言的特点
C++语言是一种编译式的、通用的、大小写敏感的编程语言,完全支持面向对象的开发模式。
主要特点是:
- 是C语言的继承,尽量兼容C语言,既保持了C语言的简介和高效,同时也增强了C语言对类型的处理。
2.加入了面向对象的特征。
一)、基本的输入/输出
在C++语言中,类库中提供了输入流类istream和输出流类ostream。
cin和cout分别是istream类和ostream类的对象,用来实现基本的键盘输入和屏幕输出。
从输入流中获取数据的操作称为提取操作,向输出流中添加数据的操作称为插入操作。
在C++中,可以使用流提取运算符“>>"从标准输入设备键盘取得数据。使用流插入运算符"<<"向输出设备屏幕输出信息。
当程序中用到cin和cout时,需要在程序中包含头文件
cin和cout一般格式
cin>>变量1>>变量2>>...>>变量n;
cout<<表达式1<<表达式2<<...<<表达式n;
cin中的变量可以是任何基本类型的变量。以空格、制表符
例如,输出/输出示例程序1-1,
#include //第1行
#include //第2行
using namespace std; //第3行
int main()
{
int oneInt1,oneInt2;
char strArray[20];
string str;
double oneDouble;
char oneChar = 'a';
cout<<"输入两个整型值,一个字符,一个字符串和一个浮点值,";
cout<<"以空格、Tab键或键分隔:"<>oneInt1>>oneInt2>>oneChar>>strArray>>oneDouble;
str = strArray;
cout<<"输入的数据是:"<
如果想将空格、制表符或
如果输出时双引号括起来的字符串太长了,可以在中间添加符号"".
二)、头文件和命名空间
在C++中,头文件不再以".h"结尾。常用的头文件
标准输入输出流:
标准文件流:
标准字符串处理函数:
标准数学函数:
定义一个命名空间的语法格式
namespace 命名空间名
{
命名空间内的各种声明(函数声明、类声明、...)
}
命名空间也称为名字空间。using namespace std;表示使用命名空间std。
引用其他命名空间的标识符的语法格式:
命名空间名::标识符名
例如,如果没有using namespace std;,则需要分别使用全称std::cin、std::cout、std::string和std::endl等来指明命名空间std。
using语句有两种形式:
using 命名空间名::标识符名;
using namespace 命名空间名;
*三)、强制类型转换运算符
static_cast用于将一种数据类型转换成另一种数据类型
static_cast<类型名>(表达式)
以程序1-1为例,下面4种都是正确的
oneInt2 = static_cast(oneDouble); //强制类型转换
oneInt2 = int(oneDouble); //强制类型转换运算符的新形式
oneInt2 = (int)oneDouble; //强制类型转换运算符的旧有形式
oneInt2 = oneDouble; //自动类型转换
const_cast用于去除指针和引用的常量性,但不能去除变量的常量性。
const_cast<类型名>(表达式)
例如,强制类型转换示例程序1-2
#include
using namespace std;
int main()
{
int a = 10;
const int *p = &a; //不能使用常量指针p修改a的值
const int ca = 30; //被const修饰
int *q;
cout<<"a的地址为:\t"<<&a<<"\ta的值为:\t"<(p); //去除p的常量性赋给q,如果写q=p;会报错
*q = 20; //如果写*p=20;是错误的
cout<<"a的地址为:\t"<<&a<<"\ta的值为:\t"<(p); //去除p的常量性赋给q,如果写q=p;会报错
*q = 40; //如果写*p=40;是错误的
cout<<"ca的地址为:\t"<<&ca<<"\tca的值为:\t"<
四)、函数参数的默认值
在C++中,可以在声明函数时为形参指定默认值。当调用有默认值的函数时,调用语句可以不给出对应的实参。
例如,定义带默认值的函数程序1-3
#include
using namespace std;
void func(int a=11,int b=22,int c=33) //为参数a,b,c分别设置了默认值11,22,33
{
cout<<"a="<
C++语言规定,提供默认值时必须按从右至左的顺序提供,即有默认值的形参必须在形参列表的最后。
在调用函数时,主调函数的实参与被调函数的形参按从左至右的顺序进行匹配对应。
例1-1 函数声明示例
void defaultvalue1(int = 2, double = 3.0); //正确
void defaultvalue2(int a, double b = 3.0); //正确
void defaultvalue3(int a = 2, double b); //错误
void func1(int a, int b = 2,int c = 3); //正确
void func2(int a = 1, int b,int c = 3); //错误
void func3(int a = 1, int b = 2,int c); //错误
例1-2 函数调用示例(一)
假设给出如下的函数声明
void func(int a,int b =2,int c = 3);
func(1,22,33);//正确
func(); //错误,参数a没有默认值
func(10,20);//正确
func(5,,9);//错误,给出的实参必须是连续的。
例1-3 函数调用示例(二)
int Max(int m,int n);
int a,b;
void func2(int x,int y = Max(a,b),int z = a - b){...}
func2(4); //正确
func2(4,9); //正确
五)、引用和函数参数的传递
引用相当于给变量起了一个别名。同一个变量的引用可以有多个。引用的定义格式如下
类型名 &引用名 = 同类型的某变量名;
举例如下
int oneInt;
int &aname = oneInt; //声明引用
定义引用时需要进行初始化。
定义引用时,可以在定义的前面加上cosnt关键字,表明该引用是“常引用”。例如:
int oneInt;
const int &cname = oneInt;
常引用与普通引用区别在于:不能通过常引用去修改其引用的变量。
例如,引用的定义与使用 程序1-4
#include
using namespace std;
int main()
{
int oneInt = 1;
int &ref = oneInt; //ref是oneInt的引用,ref等价于oneInt
const int &refc = oneInt; //定义常引用
ref = 2; //修改ref也即修改了oneInt
cout<<"oneInt=" <
image.png