第一课
1,头文件
C++为了兼容C,支持所有C头文件,但为了符合C++标准,所有的C头文件都有一个C++版本,主要的改变是【去掉 .h ,并在名字的前面加c】。如图:
C语言 | C++ |
---|---|
stdio.h | iostream(C++标准输入输出流头文件) |
math.h | cmath |
string.h | cstring |
stdlib.h | cstdlib |
… | … |
2,命名空间
为了解决命名问题(如同名),引入了命名空间,它可作为附加信息来区分不同库中,相同名称的函数
、类、变量等,本质上,命名空间就是定义了一个范围;
作用域限定符: '::';【若加在变量前面,则该变量输出的值是全局变量的值,不加则输出局部变量的值】
定义方式:
namespace name//name为自定义命名空间名
{
代码声明;
}
使用方式:
name::code;//code可以是变量或函数
using name::code;//只使用name下面的code
using namespace name;//使用name里面的所有内容
3,输入输出
C语言的输入输出主要用的是scanf和printf函数,而C++是使用类对象cin、cout进行输入输出;
例子:
#include<iostream>
using namespace std;
int main()
{
int a;
double b;
char n[44];
cin >> a >> b >> n;//cin输入流对象
cout << a << b << n <<endl;//cout输出流对象//endl换行,并清空输出缓冲区
return 0;//【\n依旧可以在cout中使用】
}
4,基础数据类型
C++和C的基础数据类型几乎一样;
char short int long (long long) float double unsigned signed ...
注意事项:
1,C语言中虽然有bool布尔类型,但需要包含头文件<stdlib.h>,而C++不用,可直接使用;
布尔类型对象可以被赋予文字值true或false,所对应的关系就是真与假的概念,即(0,1);
2,可以使用boolalpha打印出bool类型的true和false;
例子:
bool Compare(int a,int b)
{
return a < b;
}
cout << boolalpha << Compare(4,5) <<endl;//输出true
5,强弱类型
C语言:强类型,弱检查;
例子:
void* p=NULL;
int* pl=p;
int* pn=NULL;
void* pp=pn;
//无报错,无警告
C++:强类型,强检查;
例子:
void* p=NULL;
int* pl=p; //错误: "初始化",无法从"void*"转换到"int*";
//使用强制转换可以解决
int* pn=NULL;
void* pp=pn;//正确: 任意类型的指针都可以自动转为万能指针;
6,NULL与nullptr
NULL是给指针赋值的,表示指针指向的是空,nullptr在C++中替代了NULL;
在C语言中,NULL会被定义成(void*)NULL,但是C++不允许直接将void *隐式转换到其他类型,NULL只好被定义为0;
7,const
1,C语言中的const并不是真正的常量,只是表示const修饰的变量为只读;
例子:
const int age=19;
//age=99;//error 左值指定 const对象;
int* pn=(int*)&age;
*pn=99;
printf("%d %d ",age,*pn);//输出:99 99
//可知常量pn的值已经通过指针被间接改变;
2,C++中的const:
const int age=18;
//age=99;//error "age"不能给常量赋值
int* pt=(int*)&age;
*pt=99;
printf("%d %d ",age,*pn);//输出:18 99
3,const参数不匹配的情况
例子:
void show(char* name)
{
cout << name << endl;
}
show("king");//error "const char*"类型的实参与 "char*"类型的形参不兼容
//需要给函数形参加上const
char* name="king";//error
const char* name="king";//true