c++指针

c++指针

Gerneral

函数指针

  1. 先定义函数
  2. 再定义函数指针 => 返回值 ()(参数类型1,参数类型2, …) 或者 返回值 (ptrFunc)(参数类型1,参数类型2, …)

内联函数

  1. 在函数申明加 inline
  2. 或在函数定义加 inline

宏定义

  1. #define S(num) num*num
    • int result=S(10+5) ==> int result=10+5*10+5 (结果65,和预期不一样)

引用

  1. 不可以直接引用常量,可以使用常量的引用 const double& d=12.3
  2. 引用并非对象,只是已存在对象的一个别名
  3. 引用更接近const指针,一旦与某变量关联起来,就将一直效忠与它
  4. 将引用变量用作参数,函数将使用原始数据,而非副本
  5. 当数据所在内存比较大,建议使用引用
  6. 返回引用1:函数中不要返回局部变量的引用,因为局部变量回回收,可能被别人使用
  7. 返回引用2: 函数可以不返回值,默认返回传入的应用对象本身(最后一个计算)
  8. 返回引用3: 要求函数参数中包含返回的引用对象
  9. 引用bug
    • 解决办法是将返回类型改为const int& (int &num1,&num2)
      1
      2
      3
      int num=10
      int& result=sum(num);
      sum(num)=55;

默认的参数

  1. 默认参数和参数不能交替出现

函数模版

  1. 函数定义时不指定具体的数据类型(用虚拟类型代替)
  2. 函数被调用时编译器根据实参反推数据类型
    1
    2
    3
    4
    template <typename arg1,typename arg2,...>
    返回值类型 函数名称(){
    // 函数体
    }

c++中的类

1
2
3
4
5
6
7
8
9
10
11
12
class Land{
public:
Land();
~Land();
String name;
long score;
int cards[10];

void TouchCard(int[]);
bool PlayCard(int[]);
void ShowScore();
}
  1. 访问修饰符,默认是private
  2. 构造函数
  3. this返回当前对象的引用 return *this

运算符重载

  1. 使用operator 修饰符修饰

const

  1. const 修饰谁,谁就不能被修改
  2. const返回值,如果返回局部变量,返回值就不能是& 引用。若要是返回引用,就不能返回局部变量

复制构造函数

  1. 对象复制 str2=str1 是浅复制,str对象有指针,只是复制了指针,修改指针的内容,两个都会变
  2. 因此需要重载赋值运算

类型转换

  1. 自动类型转换
  2. 强制类型转换
  3. 其他类型转换为当前类型
  4. 当前类型转化为其他类型 operator type(){return XXX}

继承多态

  1. 基类引用指向派生类 People& people= peo
  2. 基类指针指向派生类 People* people= &peo
  3. 父类引用/指针指向子类 Man& man=(Man&)people