看了一下C++基础知识,发现有些东西很容易忘,下面稍微看一下:
1、重载、重定义、重写这三个东西得区别,他们都是在基类和派生类中发生的,重载是说得是你函数名是一样得,但是你得返回值或者参数类型有区别这样的继承后的函数就称为重载,这种方式编译器在编译期间就知道要执行的函数,称为静态链编。重定义是指函数一模一样你相当于把基类的函数给完全隐藏了,用的自己的。重写是在多态中使用的,是把基类中的某个虚函数根据自己的需要重新设计了一遍,这更像是一种覆盖。
2、C++中static修饰的变量或者函数,是没有this指针的,而类中的成员互相调用实际上就是通过把所处对象的起始地址赋值给this指针然后去访问的,另外静态成员是类所有的成员共享的,它是一个类的属性,而不是对象的属性,但是是可以通过类名或者对象去访问它改变它,所以它并没有指向当前对象得指针,所以静态成员函数只能访问静态成员。
3、继承中构造和析构的执行原则:首先,析构函数的执行顺序适合构造函数相反的,iu是说,先构造的后析构,置于构造函数的执行顺序,需要记住是子类对象在创建时会先去找它的父类,一直到没有父类为止,去执行构造函数,比如class A;Class B:public A;
Class C :public B;然后你去new C那么构造函数的顺序时A()->B()->C();析构函数则为C()->B()->A();
4、多继承的二义性、虚继承vbptr、多态vfptr,多继承写法:class D : public C : public B,它会继承父类的属性,至于存放顺序则根据你写法的前后位置决定,当B 和 C都继承A时那么D就会出现变量的重复,这里就称为多继承的二义性,而且最重要的时当你去创建D的对象时A的构造函数会被执行两次,这是一种低效率的行为,因此引进虚继承去解决这个问题,我们把B和C改成虚继承自A,
class B :virtual public A; class C:virtual public A;这样的话D去多继承B和C就可以避免A的构造函数被执行两次的情况.在内存原型上排列顺序是先是非公共基成员(也就是B和C的独有的成员注意vbptr是占4个字节的),然后是派生类(也就是C)自己的成员,最后是公共基成员,这里面有一个偏移量的概念,它等于vbptr和当前对象指针的偏移量(要么为0要么小于0)与虚基类指针和vbptr的偏移量之和。
多态是指同样的一条调用语句他会根据你传的对象指针不同去执行不同的形态,这种方式在编译期间无法确定到底执行啥称为动态链编,具体执行啥会根据你传入的对象指针去虚函数表里面找到你需要执行的语句。