1、变量的定义与声明
声明是主要表明变量的类型和名称,但是不会申请内存;定义是申请内存。只能定义一次,但是可以声明很多次。
int a ; extern int a; extern int a =1;//为定义
2、C++中变量的存储类型
auto:局部变量,属于动态存储类型
static:在程序运行中始终占有存储空间,只能在它的作用域范围内使用。函数中的局部静态变量,下次调用时,能取得上次预算后的值。
extern:外部变量,全局变量。一处定义,多处声明。
register:寄存器变量,属于动态存储类型,说明变量存储在寄存器中,而不是内存中,一般由编译器自身优化选择
3、C++中的内存分配
栈:局部变量,函数参数,返回地址。需要时候申请,系统自动回收
堆:new malloc 需要人为的释放,或者程序结束后由系统回收
全局/静态存储区:全局变量,静态变量,字符串常量等
代码区:函数和代码
4、C++的输入输出
对标准设备的输入输出:标准I/O
对外存磁盘上的文件输入输出:文件I/O
对内存中指定的字符串存储空间的输入输出:串I/O
5、操作符重载复习
如果要为类重载操作符,并且将非类的项作为其第一个操作数,则可以用友元函数来反转操作数顺序。
常用的友元操作符重载:<<
调用cout<<A应该使用的是cout对象本身,而不是它的拷贝,因此,应该按照引用来传递cout,并且返回cout的引用,这样就可以连续输出了
friend istream& operator>>(istream& , Love&);
6、数组指针和指针数组
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*p)[3]; //是数字指针,指向一个数组的指针
p=a;
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int *p[3]; //数组指针,数组的元素由指针组成
for(int ix=0;ix<3;ix++)
p[ix]=a[ix];
7、函数指针和指针函数
int fun(int x);
int (*f)(int x); //函数指针,指向函数的指针,可以用此来调用函数
f=fun;
int *fun(int x); //指针函数,返回指针的函数
8、 C++ public protected and private 区别
访问权限:
public 公共接口 :向外界开放,可通过对象或类名访问
protected 受保护的访问:只向子类开放访问权限 ,不可通过对象访问
private私有 :只有类成员可以访问,外界不可以通过任何形式访问
继承关系:
public继承:父类成员的访问权限在子类中不变,仍为自己原来的权限。
protected继承:父类的public成员访问权限在子类中变为protected;父类的protected成员和private成员在子类权限维持原来的权限不变
private继承:父类的所有成员访问权限在 子类中变为private
其中,public继承是is-a的关系,可以用父类的指针引用指向子类的对象;protected和private继承没有is-a的关系,只表示“组合”或者“拥有”的关系,不可以用父类的指针或引用指向子类对象。
C++对象模型中,子类对象的内存空间中包含父类的部分,当用父类指针指向一个子类的对象实时,这个指针可以访问的是相应的父类那部分的内存;在protected和private继承的情况下,父类的内存部分是私有的,不对外开放的,所以,protected和private继承时,不可以用父类的指针或引用指向子类对象。
通过对象访问成员时,只能访问到共有(Public)成员。
需要禁止类以构造形式实例化类的时候,可以将类的构造函数声明为private 和protected 的形式。构造函数声明protected 的形式的类不能被直接实例化,但可以通过被继承,子类可以在实例化的时候调用父类的protected构造函数。
构造函数声明为private的类的实例化不能依赖构造函数,可以提供public 的Instance()的方法,在Instance()定义中调用构造函数,返回类的实例。单例模式就是利用这个原理。
9、友元
友元函数:友元函数的特点是能够访问类中的私有成员的非成员函数。
友元类:友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。
10、类中static
类中static数据成员被类所有的对象共享,包括类的派生类。调用时与对象调用普通成员一样
类的静态成员可以成为成员函数的可选参数,普通成员不可以。
类的静态成员的类型可以是所属类的类型,普通成员不可以。普通成员只能声明为所属类类型的指针或引用。
类的静态方法只能访问类的静态成员。
11、多态
动态多态:即通过继承和虚函数方式,基类指针指向派生类,运行时采用迟绑定技术,根据实际对象来选择要调用的函数。
静态多态:泛型式编程。
函数多态:即函数重载
宏多态:宏展开
12、重载、覆盖、隐藏
重载:发生在一个类中的,函数名相同,参数不同
覆盖:父类和子类之间的,基类必须为虚函数,函数名和参数都相同
隐藏:父类和子类之间的,(1)函数名相同,参数不同,无论有无virtual,子类都会覆盖父类。(2)函数名相同,参数相同,父类没有virtual,父类会被子类覆盖