static

1)static修饰成员变量

对于非static数据成员,每个类对象都有自己的拷贝。

而静态数据成员被当作是类的成员,无论这个类被定义多少个,静态数据成员只有一个拷贝,对于所有对象共享(包括其派生类)。所以,静态数据成员的值对每个对象都是一样的。

静态数据成员在全局数据区分配内存,在没有产生类对象前也是可以使用的。

2)static修饰成员函数

静态成员函数不与任何对象产生联系,因此它不具有this指针。从这个意义上,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,只能调用其他静态成员函数。

静态成员函数在代码区分配内存。

c++的多态分为静态多态和动态多态。

动态多态通过虚函数和继承关系来实现,执行动态绑定,在运行时就确定。

1)虚函数

基类指针在调用成员函数(虚函数)时,就会去查找该对象的虚函数表。虚函数表的地址在每个对象的首地址,查找该虚函数表中该函数的指针进行调用。

在类设计的时候,虚函数表直接从基类继承过来,如果覆盖了其中的某个虚函数,那么虚函数表的指针就会被替换,因此可以根据指针准确找到该调用哪个函数

如果一个对象是局部变量,则该类数据存放在栈区,如果一个对象通过new/malloc动态申请,则该类数据存放在堆区。