c++指针
Gerneral
函数指针
- 先定义函数
- 再定义函数指针 => 返回值 ()(参数类型1,参数类型2, …) 或者 返回值 (ptrFunc)(参数类型1,参数类型2, …)
内联函数
- 在函数申明加 inline
- 或在函数定义加 inline
宏定义
- #define S(num) num*num
- int result=S(10+5) ==> int result=10+5*10+5 (结果65,和预期不一样)
引用
- 不可以直接引用常量,可以使用常量的引用 const double& d=12.3
- 引用并非对象,只是已存在对象的一个别名
- 引用更接近const指针,一旦与某变量关联起来,就将一直效忠与它
- 将引用变量用作参数,函数将使用原始数据,而非副本
- 当数据所在内存比较大,建议使用引用
- 返回引用1:函数中不要返回局部变量的引用,因为局部变量回回收,可能被别人使用
- 返回引用2: 函数可以不返回值,默认返回传入的应用对象本身(最后一个计算)
- 返回引用3: 要求函数参数中包含返回的引用对象
- 引用bug
- 解决办法是将返回类型改为const int& (int &num1,&num2)
1
2
3int num=10
int& result=sum(num);
sum(num)=55;
- 解决办法是将返回类型改为const int& (int &num1,&num2)
默认的参数
- 默认参数和参数不能交替出现
函数模版
- 函数定义时不指定具体的数据类型(用虚拟类型代替)
- 函数被调用时编译器根据实参反推数据类型
1
2
3
4template <typename arg1,typename arg2,...>
返回值类型 函数名称(){
// 函数体
}
c++中的类
1 | class Land{ |
- 访问修饰符,默认是private
- 构造函数
- this返回当前对象的引用 return *this
运算符重载
- 使用operator 修饰符修饰
const
- const 修饰谁,谁就不能被修改
- const返回值,如果返回局部变量,返回值就不能是& 引用。若要是返回引用,就不能返回局部变量
复制构造函数
- 对象复制 str2=str1 是浅复制,str对象有指针,只是复制了指针,修改指针的内容,两个都会变
- 因此需要重载赋值运算
类型转换
- 自动类型转换
- 强制类型转换
- 其他类型转换为当前类型
- 当前类型转化为其他类型 operator type(){return XXX}
继承多态
- 基类引用指向派生类 People& people= peo
- 基类指针指向派生类 People* people= &peo
- 父类引用/指针指向子类 Man& man=(Man&)people