继承类的对象的析构函数执行



我有以下两个类ProgrammerCSstudent的示例代码,其中

CSstudent:public Programmer

两个类都定义了析构函数:

class Programmer{
           .........
            public:
               ~Programmer(){
                 cout<<"A Programmer obj destroyed";       
        }
      }
class CSstudent:public Programmer{
           .........
       public:
        ~CSstudent(){
          cout<<"CSstudent obj destroyed";
      }
         }

现在在main():

int main(){
    CSstudent cs1;
    /* call to CSstudent member functions by invoking the cs1 object
      ........... */
    cout<<cs1.getName()<<cs1.getUni()<<cs1.getLang()<<endl;
}

程序运行后,我得到以下结果:CSstudent对象已销毁一个程序员对象被销毁

我知道析构函数不能被继承,当对象超出作用域时才调用析构函数。我初始化一个CSstudent对象,那么为什么程序员类的析构函数调用?

我希望得到这样的输出:CSstudent obj destroyed

派生类本质上包含基类。当构造派生类时,首先构造基类,然后构造派生类(这是有意义的,因为派生类需要使用它假定已正确初始化的基类变量)。析构函数则相反,首先调用派生类析构函数,然后调用基类析构函数来清除基类信息。

因为在内部创建CSstudent对象时,会创建一个Programmer对象。因此,当您删除CSstudent时,基对象也必须被删除。

最新更新