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

时间:2015-10-26 18:51:17

标签: c++ c++11 destructor

我有以下两个类的示例代码 Programmer CSstudent 其中

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 obj被摧毁     程序员obj销毁

我知道析构函数不是继承的,当对象超出范围时会调用析构函数。我初始化了一个CSstudent对象然后为什么调用Programmer类的析构函数?

我希望这个输出: CSstudent obj被破坏

2 个答案:

答案 0 :(得分:5)

派生类本质上包含其中的基类。构造派生类时,首先构造基类,然后构造派生类(这是有道理的,以防您的派生类需要使用它假定已正确初始化的基类变量)。在破坏时则相反,首先调用派生类析构函数,然后调用基类析构函数来清理基类信息。

答案 1 :(得分:0)

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