一、函数重载:
在同一个作用域中,如果有多个函数的名字相同,同一个作用域,但是形参列表不同(参数类型不同或参数个数不同),返回值类型可同也可不同,我们称之为重载函数。重载的函数是通过形参列表区分的,与返回值类型无关。函数重载其实是"一个名字,多种用法"的思想,不仅函数可以重载,函数重载就是重定义;覆盖是重写。
二、new和malloc的区别:
1.new关键字 malloc函数
2.new自由存储区域 malloc堆上
3.new malloc
operator new
constructor
还可以做初始化 malloc 单纯开辟内容
4.new可以重载 malloc不能重载
5.new可以调用malloc malloc不能调用new
6.内存开辟 new抛异常 malloc返回NULL
7.new可以开辟常量 malloc不能
三、c和c++中的const
1、const修饰变量
const修饰变量,可以使变量具有常属性,也就是该变量在以后的使用中其值都不能 进行改变。(要进行初始化)
2、const修饰指针
int *const p // p不可以变,p指向的值可以变
int const *p // p可以变,p指向的值不可以变
3、保护函数参数不被改变
用const修身函数的参数,可以保证该参数的值在函数内部不被改变。 (一般用引用或者传地址的方式给函数传递一个参数,如果在函数体内对该参数进行修改,那么就会连实参的值一并进行修改。)
4、const修饰函数返回值
const修饰函数的返回值,防止函数的返回值被修改,但是这里要注意的是,必须也用 const修饰的变量来接收这个函数的返回值
5、const修饰类成员函数
const可以修饰类成员函数,防止类成员函数中除了static成员之外的其他成员被修改。
6、const修饰类的成员变量
类的成员变量可以分为静态的和非静态的,如果const修饰的是静态的成员变量,可以在构造函数中对该变量进行初始化;如果const修饰的是静态的成员变量,则需要在类外对该变量进行初始化。
四、引用:
1、引用是一个别名(底层以指针做支持)
2、引用一定要初始化
3、引用不能引用取地址的数据
4、引用不能改变
5、引用变量 只能使用 引用变量 所有引用的数据
五、inline函数:
编译阶段 在代码的调用点直接代码展开
inline函数和static修饰的函数的区别
1.inline函数 无开栈和清栈开销
static 有
2.inline 在调用点直接代码展开
static 函数符号属性 l
3、inline函数和宏的区别
inline 编译 类型检查 和 安全检查
宏 预编译 无
inline是一个更安全的宏
4、注意事项
实现在.h文件
只在Release版本生效
给编译器的一个建议 递归 循环 switch
基于实现,不是声明
5、inline缺点
以代码膨胀为代价 空间换时间
6、建议
开栈的开销 > 执行的开销 建议设为inline
开栈的开销 < 执行的开销 不建议
六、函数的默认值:
1.自右向左依次赋予
2.不能重复赋予
3.一般赋在声明上
七、c/c++互相调用
1.C++调用C
c++源文件 extern “C”
2.C调用C++
c++源文件可修改 extern “C”
c++源文件不可修改 加中间层 .cpp
3.不明确编译器
#ifdef __cplusplus
八、static:
1、对于非静态数据成员,每个类对象都有自己的拷贝。而静态数据成员被当作是类的成员。无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷贝,由该类型的所有对象共享访问。
2 、静态数据成员存储在全局数据区。定义时要分配空间,所以不能在类声明中定义。由于静态数据成员属于本类的所有对象共享,所以,它不属于特定的类对象,在没有产生类对象时其作用域就可见,即在没有产生类的实例时,程序员也可以使用它。
3、 静态数据成员和普通数据成员一样遵从public,protected,private访问规则;
4 、static成员变量的初始化是在类外,此时不能再带上static的关键字private,protected 的static成员虽然可以在类外初始化,但是不能在类外被访问。