我会输入一个例子:
class A
{
public:
virtual ~A(){}
};
class B: public A
{
public:
~B()
{
}
};
int main(void)
{
A * a = new B;
delete a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在在上面的例子中,析构函数将以递归方式从下到上调用.我的问题是编译器如何做这个MAGIC.
/*以下程序似乎神秘地输入递归,即使看不到任何东西.编译器:g ++(Ubuntu 4.4.3-4ubuntu5.1)4.4.3机器:x86操作系统:Ubuntu 10.04 64位
*/
#include<iostream>
using namespace std;
class Test
{
public:
Test ():x(9)
{
cout << " Test::Test\n";
Test (x);
}
Test (int a)
{
cout << " Test::para\n";
}
private:
int x;
};
int main(void)
{
Test a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
我试图找出Derived类和Base Class Object的地址,我发现它们是一样的.实际上,我很困惑如何得到两者的地址?
#include<stdio.h>
class Base {
public:
Base ()
{
printf ("\n Base :: %p\n", this);
}
~Base () {
printf ("\n Base::~Base\n");
}
};
class Der:public Base {
public:
Der () {
printf ("\n Der: %p \n", this);
}
~Der () {
printf ("\n Der:: ~Der\n");
}
};
int main(void) {
Base b;
Der d;
return 0;
}
Run Code Online (Sandbox Code Playgroud) c++ ×3