继承对象的析构函数执行 class
Destructor execution of object of an inherited class
我有以下两个 classes Programmer 和 CSstudent where
的示例代码
CSstudent:public Programmer
为 classes 定义了析构函数 :
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 对象已销毁
A Programmer obj destroyed
我知道析构函数不是继承的,当对象超出范围时会调用析构函数。我初始化了一个 CSstudent 对象,那么为什么要调用 Programmer class 的析构函数?
我希望得到这样的输出:
CSstudent 对象已销毁
派生的 class 本质上包含基数 class。构造派生 class 时,首先构造基础 class,然后构造派生 class(这是有道理的,以防您的派生 class 需要使用它假定已正确初始化的基础 class 变量)。析构时则相反,先调用派生class析构函数,然后调用基class析构函数来清理基class信息。
因为在内部创建 CSstudent 对象时,会创建一个 Programmer 对象。因此,当您删除 CSstudent 时,基础对象也必须被删除。
我有以下两个 classes Programmer 和 CSstudent where
的示例代码CSstudent:public Programmer
为 classes 定义了析构函数 :
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 对象已销毁 A Programmer obj destroyed
我知道析构函数不是继承的,当对象超出范围时会调用析构函数。我初始化了一个 CSstudent 对象,那么为什么要调用 Programmer class 的析构函数?
我希望得到这样的输出: CSstudent 对象已销毁
派生的 class 本质上包含基数 class。构造派生 class 时,首先构造基础 class,然后构造派生 class(这是有道理的,以防您的派生 class 需要使用它假定已正确初始化的基础 class 变量)。析构时则相反,先调用派生class析构函数,然后调用基class析构函数来清理基class信息。
因为在内部创建 CSstudent 对象时,会创建一个 Programmer 对象。因此,当您删除 CSstudent 时,基础对象也必须被删除。