类中函数分为3类:
构造函数:不可以虚化(重写),在子类的构造函数前自动被调用一次父类的构造函数.
析构函数:当[DELETE]类指针时 非虚会从[此类]一直释放到基类,为虚时会从被赋于的[NEW类]的析构函数一直释放到基类.
总得来说释放[方向]都是从[子类]到[父类],只是开始释放的位置不一样.这就是为什么基类的析构函数要虚化的原因.
如[虚 A::F] [B类中不重写] [虚 C::F] 当 A* a = NEW C; a->F()是C类的.
如[虚 A::F] [虚 B::F] [C类中不重写]当 A* a = NEW C; a->F()是B类的.
如[虚 A::F] [C类中不重写] [C类中不重写]当 A* a = NEW C; a->F()是A类的.
构造函数:不可以虚化(重写),在子类的构造函数前自动被调用一次父类的构造函数.
析构函数:当[DELETE]类指针时 非虚会从[此类]一直释放到基类,为虚时会从被赋于的[NEW类]的析构函数一直释放到基类.
总得来说释放[方向]都是从[子类]到[父类],只是开始释放的位置不一样.这就是为什么基类的析构函数要虚化的原因.
普通函数:为虚时表示派生类可以[重写]这个函数,
以下的关系是A派生B派生C
如[虚 A::F] [虚 B::F] [虚 C::F] 当 A* a = NEW C; a->F()是C类的.如[虚 A::F] [B类中不重写] [虚 C::F] 当 A* a = NEW C; a->F()是C类的.
如[虚 A::F] [虚 B::F] [C类中不重写]当 A* a = NEW C; a->F()是B类的.
如[虚 A::F] [C类中不重写] [C类中不重写]当 A* a = NEW C; a->F()是A类的.
如[非虚 A::F] [非虚 B::F] [非虚 C::F] 当 A* a = NEW C; a->F()是A类的.
具体工程代码教程可以在这里下载: 下载地址