第一章-复习C
1、复习指针的应用
int* p=12;
p=p+1;
此时p的地址是16(int类型占4个字长),p的值即是地址16所对应的值
int* p;
int a=10;
p=&a; //p指向a,其值为10
内存分配和回收
- C语言
int* p=(int *)malloc(sizeof(int));
free(p);
- C++
int* p=new int; //系统为指针分配一块可用内存
*p=10; //分配内存后可以直接对p赋值
delete p;
C语言通过 malloc 和 free函数分配和回收内存
C++通过 new 和 delete 关键字为指针分配和回收内存
分配的内存要及时回收,否则容易造成内存泄漏
delete只是回收了内存,并没有删除指针,指针通过内存的再分配仍然可以使用
2、结构体
结构体定义时在其后加上冒号即可继承别的结构体
struct A
{
int a,b;
int add()
{
return a+b;
}
};
struct B:A //默认继承,等级为public
{
int c;
};
struct C:private A //私有继承,等级是private
{
int c;
};
struct的默认继承等级为public,class的默认继承等级为private
3、OOP(面向对象)
OOP的主要特点:
- 抽象
- 抽象就是对具体对象进行概括,抽出这一类对象的公有性质并加以描述的过程。
- 封装
- 封装就是将抽象出的数据成员,函数成员相结合,将它们视为一个整体。
- 继承
- 允许程序员在保持原有类的基础上,进行更具体的说明。
- 多态
- 接口的多种不同的功能实现方式。
Tips
- 常量
- 在C里面使用宏定义#define
- 在C++里不推荐#define,而是使用const来定义常量
- bool
- bool 类型对应int型的数值只有0和非0两种
- true为非0,false为0
- 取模运算
- C/C++的取模运算,除法运算向下取整
- 17%10 =7
- -17%10 = (-17)-(17/10)*10= (-17)-(-1)*10= (-17)+10= -7
- 17%-10 = 17-(-17/-10)(-10)= 17-(-1-10)= 7
- -17%-10 = (-17)-(-17/-10)(-10)=(-17)-(1-10)= -7
- 可以简单记忆为,将两数视为正数进行取模,最终符号取决于第一个数
- 内联函数
- 用 inline 定义
- 编译时会将其插入到函数使用处,可以提高运行速度和效率,但是会增加空间开销
- 一般用于内容简单又大量使用的函数
inline int add(int a,int b)
{
return a+b;
}
- 带默认形参值的函数
- 函数在定义时可以预先声明默认的形参值
- 调用时如果给出实参,则用实参初始化形参
- 如果没有给出实参,则采用预先声明的默认形参值
int add(int x=5,int y=6)
{
return x+y;
}
- 函数重载
- 两个以上的函数,具有相同的函数名,但是形参个数或者类型不同,编译器会根据实参和形参的类型和个数的最佳匹配,自动确定调用哪一个函数
int add(int a,int b);
int add(int a,double b);
int add(double a,double b);