1.函数指针的好处就是可以把函数的当作形参代入到另一个函数中。函数指针的实参用函数名代入。
2.int main(int argc, char * argv[])
argc 为命令行个数 用空格分开 包括函数名
argv数组 大小为argc个 里面存有命令行的值
//argv[0]为函数名
3.引用
<1>定义时初始化某个变量
<2>初始化之后不能再引用别的了
<3>只能引用变量,不能引用常量或表达式
4.引用作为函数的返回值
int n=4;
int &SetValue()
{
return n;
}
int main()
{
SetValue()=40;
cout<<n;
return 0;
}
5.常引用 //前面加const
注意const修饰的内容
const int & n=m;
修饰的引用,所以引用不能被修改,所以引用的值不能被修改。
6.new实现动态内存分配
<1>P=new T;
T为类型名 P为T*类型的指针 动态分配sizeof(T)字节的内存
<2>P=new T[N];
分配N*sizeof(T)字节的内存
new运算符的返回值的类型都是T*
7.delete释放动态分配内存
delete p;
delete []p; //释放数组
不能delete多次。
8.内联函数
减少函数调用的开销 //直接把函数体贴上去
inline+ 函数名
9.函数重载
函数名相同,参数不同(个数或者类型不同)
int max(int , int);
int max(double,double);
int max(int,int,int);
<1>使函数的命名简单
<2>编译器根据实参确定调用的函数
<3>注意发送二义性//几种情况都可以,编译器不知道调用哪个函数 比如 max(2.4,4);
//若函数名相同,参数相同,返回类型不同 则为重复定义
10.函数缺省参数
<1>提高程序的可扩充性
<2>能让最右边的连续参数缺省 //实参左对齐
11.复制构造函数起作用的三种情况
<1>用类的成员给类的成员初始化
<2>类的成员(实参)给函数的形参初始化
<3>函数返回类的成员//赋给另一个成员
构造函数可以自己写 形参为类的成员的引用
Class A
{
A(const A &a);
}
并且调用复制构造函数给类的成员初始化的时候,二者的值不一定一样。取决于你的类的复制构造函数是怎么写的。
12.类型转换构造函数调用时会产生临时的类的对象,则会调用
->类的构造函数和类的析构函数
13.类的静态成员变量/函数
只有一份,类的成员共享这一份。
而其他成员变量int num等,每个类的对象都有自己的一份。
14.this指针//类的成员函数相当于会隐藏的多出一个参数为this指针 指向实现函数的对象
15.析构函数和构造函数的顺序问题