以下是引用lz1091914999在2012-3-2 15:59:54的发言:
想想,构造和析构函数都有着特别的意义,这是与其它函数不同的,并且在一个类层次中析构函数都会被调用,那么如果一个类没有析构函数的定义,那么调用那一块代码呢?
但是如果需要一个函数体,那又怎么称得上是“纯”?它的唯一价值就是让这个类成为抽象类,所以不能创建这个类的对象,当然让其它成员函数成为纯的效果也一样。
但是继承一个有纯虚析构函数的类的时候,在派生类中可以不给出析构函数的定义,并且这个类也不是抽象类,这是与其它函数不同的地方(其它纯虚函数没有给出定义的话,这个类也是抽象类)。因为编译器自动帮我们生成了一个定义,所以也可以认为重写了父类的纯虚函数。所以你明白为什么编译器和链接器强迫我们为它提供一个函数体了嘛?
你的意思是不是说...假如基类析构函数是纯虚函数的话,按照纯虚函数的定义的话,派生类就无法执行析构函数销毁对象了?(假如派生类没有定义析构函数的话)
想想,构造和析构函数都有着特别的意义,这是与其它函数不同的,并且在一个类层次中析构函数都会被调用,那么如果一个类没有析构函数的定义,那么调用那一块代码呢?
但是如果需要一个函数体,那又怎么称得上是“纯”?它的唯一价值就是让这个类成为抽象类,所以不能创建这个类的对象,当然让其它成员函数成为纯的效果也一样。
但是继承一个有纯虚析构函数的类的时候,在派生类中可以不给出析构函数的定义,并且这个类也不是抽象类,这是与其它函数不同的地方(其它纯虚函数没有给出定义的话,这个类也是抽象类)。因为编译器自动帮我们生成了一个定义,所以也可以认为重写了父类的纯虚函数。所以你明白为什么编译器和链接器强迫我们为它提供一个函数体了嘛?
蹲得越低,跳得越高.