定义时看的是等号右边的,析构时看的是等号左边的(析构函数不是虚函数时)
#include <bits/stdc++.h>
using namespace std;
#define MAXX 10005
#define MODD 1000000007
#define LL long long
#define mem(a, b) memset(a, b, sizeof(a));
class A
{
public:
A() { cout << "A" << endl; }
~A() { cout<<"~A"<<endl; }
};
class B:public A
{
public:
B()
{
cout << "B" << endl;
}
~B()
{
cout<<"~B"<<endl;
}
};
int main(void)
{
A *pa = (A*)new B();
cout << "YES" << endl;
B *pb = (B*)new A();
delete pa;
cout << "YES" << endl;
delete pb;
A *pca = new A();
cout << "YES" << endl;
B *pcb = new B();
delete pca;
cout << "YES" << endl;
delete pcb;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define MAXX 10005
#define MODD 1000000007
#define LL long long
#define mem(a, b) memset(a, b, sizeof(a));
static int ss = 0;
class A
{
public:
static int s ;
A() { cout << "A" << endl; }
virtual ~A() { cout<<"~A"<<endl; }
};
class B:public A
{
public:
B()
{
cout << "B" << endl;
}
virtual ~B()
{
cout<<"~B"<<endl;
}
};
int A::s = 5;
int main(void)
{
A *pa = (A*)new B();
cout << "YES" << endl;
B *pb = (B*)new A();
// cout << A::s << endl;
cout << pa->s << endl;
delete pa;
cout << "YES" << endl;
delete pb;
A *pca = new A();
cout << "YES" << endl;
B *pcb = new B();
delete pca;
cout << "YES" << endl;
delete pcb;
return 0;
}