C/C++笔记 --C++ 面向对象

1、虚函数
        定义虚函数的类称为多态类,编译器会为多态类自动生成一个虚函数表vtable。vtable是一个函数指针数组,用来描述每个类的虚函数地址。多太类同时还有一个指向虚函数表的指针,为类的对象访问虚函数。vtable中还应包含typeInfo的信息,用来做RTTI。派生类的vtable应该兼容其基类的vtable。只有通过传派生类引用或指针的形式才能让基类使用派生类的虚函数。
2、类的静态成员
       静态成员变量须在源文件中初始化,它由整个类的的所有对象共享。静态成员函数指针,没有this指针,不能直接使用类的成员变量。
3、四个自动产生的函数
     public inline函数:默认构造函数,默认析构函数,默认赋值函数,默认拷贝构造函数。
4、构造与析构函数。
        构造函数可以带参数,通过初始化列表进行类数据成员的初始化,类的非静态const数据成员和引用成员只能在类的初始化列表进行初始化。派生类可以在初始化列表中调用积累的构造函数以对积累的数据成员进行初始化。     对带一个参数的构造函数的声明处,用explict修饰,以免与类型转换符引起歧义。析构函数和构造函数没有返回值,析构函数还没有参数。
       类对象的初始化顺序,基类的构造函数->成员对象的构造函数,成员对象的构造函数调用按照其定义顺序进行。在多重派生的类中,构造函数是递归进行的。构造函数的调用顺序与初始化成员列表的顺序无关。析构函数的顺序与构造函数完全相反。
        非静态局部变量在定义是进行构造函数调用,在生存域的结尾出析构销毁。
        静态局部变量在其定义出构造,若无默认构造函数,则自动初始化为0;在main结束后析构。
         全局变量(静态,非静态变量,类的静态成员),在main之前构造,main结束后析构,默认为全0初始化。
        引用类型的对象,不调用构造与析构。
        动态创建的对象,在new时构造,delete时析构。
5、拷贝构造函数和拷贝赋值函数。
拷贝构造函数
        A::A(const A& other)  //other允许操作私有成员
拷贝赋值函数
       A& A::opertor=(const operator& other); //other允许操作私有成员
      a.判断是否自身
       this == &other 
      b.赋值,对指针从新分配内存并赋新值
       c.返回*this
6。派生类的基本函数的实现注意
        基类的构造函数,析构函数,赋值函数都不能被派生类继承。所以在写派生类是对这些函数应该注意:
        派生类的构造函数,应该显示的调用(初始化列表)基类的构造函数。
       若基类是个多态类,那么必须把基类的构造函数定义为虚函数,这样派生类的析构函数也是虚函数(最好显示声明,便于阅读理解),以免对造成内存泄漏。
       派生类写赋值函数的时候,不要忘记对基类的数据成员也要重新赋值,可以通过调用基类的赋值函数来实现。

你可能感兴趣的:(C++技术)