从C到C++
从C到C++
C++
1、所有c语言文件都是标准的C++文件
2、文件后缀为.cpp 编译器程序为g++
名字控制:重名问题
命名空间:namespace :: 域解析符
1 | namespace A |
using :使后面跟着的描述符生效
1 | using namespace A::B; //使命名空间A::B生效 |
#include
1 | std::cin>>a; |
#include
#include
#include
std: standrad :C++标准命名空间
1 | std::cout << "hello\n"; |
std::endl :1、输出一个换行 2、刷新输出流
1 | std::cout << "hello\n"<<std::endl; |
struct加强:
1、结构体名称可以单独作为类型出现
2、结构体里可以定义函数
引进了bool类型: bool成为了内嵌入编译器的关键字
1、占一个字节内存
2、赋任何非0值都是1
左值=右值
左值:有内存,可修改的值
右值:没有内存,不可修改的值
三目运算符的加强: ? :
表达式返回的是左值
const:
1 | const int a=10; |
a的值在符号表里,取地址时分配内存,但通过a去找,一定是去符号表里找,来保证a的常量属性
const是一个真正的常量
引用:(变量的别名)
1、引用不能单独出现,不能单独定义,一定要初始化
2、引用一经定义,不会再修改朝向
定义和指针相似:int &a;
1 | int b = 10; |
此时修改a相当于修改b
3、其本质就是指针常量
1 | int &b=a; |
所以又称左值引用,没有办法传递右值
1 | int &b=10; //该定义不可以 |
常引用:左值引用无法传递右值,引入常引用 (常引用不能修改)
1 | const int &b=10; |
函数:
内联函数:inline 会在函数调用的地方进行代码替换
目的:提高程序执行的效率
用内联函数替换宏函数
1 | inline int add(int a,int b) |
注意事项
1、定义在类内和结构体内的函数自动变为内联函数
2、内联的规则:
(1)不能有循环(for while 递归)
(2)不能存在多个判断分支
(3)函数体不能太长
(4)不存在任何对函数的取地址操作
默认参数:
调用函数时,不传参就用默认值
默认参数定义在函数声明中时,定义中不能再出现
1 | 声明:int func(int a,int b,int c=0); |
1、默认参数都放在最右边
2、出现默认参数时,后面的都必须是默认参数
占位参数:
1 | int func(int a,int) |
函数重载:
不同的函数功能可以用相同的函数名
1 | func(int a) ->func //c语言中 |
重载的规则:
1、参数数量不一样
2、参数类型不一样
3、参数顺序不同
4、返回值不同能不能构成重载? 不能!!!(返回值并没有被当成名字放进去)
nullptr : 空指针 在C++中不能用NULL,只能用 nullptr
在重载中,宏定义没有数据类型
建议在C++中用 const 替代 #define 定义常量
1 | #define Max 1024 |
C语言:弱类型
C++:强类型
堆上的内存管理:(new、delete)
新建堆上空间:new
1 | int *a = new int;//C++ |
1、自行计算所需的内存大小
2、返回的指针不需要强转
3、不需要判断返回值为空
如果申请失败,会抛出异常,如果异常不被捕获,默认终止程序
释放内存:delete
1 | delete a; |
字符串:
#include
定义:std::string s;
1 | std::string s="hello";//创建字符串 |
字符串的输入
1 | std::string s; |