关于析构的问题,..附代码...
1.正常的程序*****************************
#include <iostream>
using namespace std;
class CSomething
{
public:
CSomething(){cout<<"2";}
virtual ~CSomething(){cout<<"2";}
};
class CParent
{
public:
CParent(){cout<<"1";}
virtual ~CParent(){cout<<"1";}
};
class CChild : public CParent
{
public:
CChild(){cout<<"3";}
virtual ~CChild(){cout<<"3";}
protected:
CSomething something;
};
int main(int argc,char** argv)
{
CParent* pParent = new CChild();
delete pParent;
return 0;
}
输出"123321"
2.**************************************
#include <iostream>
using namespace std;
class CSomething
{
public:
CSomething(){cout<<"2";}
~CSomething(){cout<<"2";}
};
class CParent
{
public:
CParent(){cout<<"1";}
~CParent(){cout<<"1";}
};
class CChild : public CParent
{
public:
CChild(){cout<<"3";}
~CChild(){cout<<"3";}
protected:
CSomething something;
};
int main(int argc,char** argv)
{
CParent* pParent = new CChild();
delete pParent;
return 0;
}
为何输出"1231"?
3.****************************************
#include <iostream>
using namespace std;
class CSomething
{
public:
CSomething(){cout<<"2";}
~CSomething(){cout<<"2";}
};
class CParent
{
public:
CParent(){cout<<"1";}
virtual ~CParent(){cout<<"1";}
};
class CChild : public CParent
{
public:
CChild(){cout<<"3";}
~CChild(){cout<<"3";}
protected:
CSomething something;
};
int main(int argc,char** argv)
{
CParent* pParent = new CChild();
delete pParent;
return 0;
}
为何也运行正常,输出"123321"?
4.**********************************
#include <iostream>
using namespace std;
class CSomething
{
public:
CSomething(){cout<<"2";}
~CSomething(){cout<<"2";}
};
class CParent
{
public:
CParent(){cout<<"1";}
~CParent(){cout<<"1";}
};
class CChild : public CParent
{
public:
CChild(){cout<<"3";}
virtual ~CChild(){cout<<"3";}
protected:
CSomething something;
};
int main(int argc,char** argv)
{
CParent* pParent = new CChild();
delete pParent;
return 0;
}
为何不能正常运行? 中间结果为"1231"?
5.继承中的析够内在机制是什么?讨论讨论吧.
讲的有理就有分:)