函数重载:符号的生成规则
函数重载的三要素:1.同名 2.同参 3.同作用域
C函数名称
C++函数原型:1.形参的个数 2.形参的类型 3.函数的形参 <1>形参的个数 <2>形参的类型 <3>形参的顺序
多态:同一接口,不同的形态
new和delete的区别:
new 申请内存,调用构造函数。
delete 调用析构函数,释放内存。
1.new和malloc有什么区别
2.动态开辟内存
C语言中:
malloc是函数 void* malloc(size_t size)
free是函数 void free(void* ptr)
C++中:
new是关键字 malloc是关键字
区别:1.new是关键字 malloc是函数
2.new再自由存储区域 malloc在堆上
3.new可以做初始化 malloc单纯开辟内存
4.new可以重载 operator new 调用构造
malloc不能重载
5.new可以调用malloc malloc不能调用new
6.new可以开辟常量 malloc不能开辟常量
const
C语言中:修饰常变量 编译阶段,常变量是否做左值 其他处理和变量是一样
const int gdata=10;//global
C++中:修饰常量 不能作为左值,不能定义数组大小,没有编译时期的替换规则。
编译阶段,把用到常量的地方替换成常量初始化的值
const int gdata=20;//.data1 extern
<1>一定要初始化 (初始化必须写在构造函数的初始化列表中)
<2>不能做左值 <3>不能间接修改,杜绝间接访问来修改常量内存的风险
引用&:别名(内存单元的别名)
1.一定要初始化 引用底层是* const指针,必须初始化
2.引用 不能引用 不能取地址的数据
3,引用不能改变(引用一经引用一块内存,再也不能引用其他内存)
4.引用只能使用,引用变量所引用的数据
inline函数:inline关键字修饰的函数成为内联函数,是对系统的建议,并不保证一定处理为内联。
编译 函数调用 代码展开(在编译阶段,在函数调用点将函数的代码展开,省略了函数栈帧开辟回退的调用开销,效率比较高)
inline函数和static修饰的函数的区别:
1.inline 无开栈清栈的开销 static 有
2.inline表示在编译阶段有代码的展开,内联函数不产生符号,本文件可见。递归,循环等函数结构不可能被处理为内联。
static 符号属性为1,在文本文件可见,将global变为local,
inline 和宏的区别
1.inline编译阶段处理,有类型检查和安全检查
宏:预编译阶段 无安全检查
2.inline是一种更安全的宏
inline注意事项:1.inline一般写在头文件中 2.inline是给编译器的一个建议(递归i,循环,switch等不会处理)3.inline是基于实现的,不是基于声明的。
inline的缺点:代码膨胀为代价,空间换时间
1.栈的开销 >执行的开销 设为inline
2.栈的开销 <执行的开销 不建议inline
函数的默认值:
1.从右往左依次赋予
2.不能重复赋予
3.一般写在声明上
C和C++的相互调用
1.C++调用C 使用extern "C",修饰函数声明
2.C调用C++ <1>C++源文件可修改 C++加 exter "C"
<2>C++源文件不可修改 加中间层.cpp
3..C被调用 #ifdef_cplusplus