#include
using namespace std;
class A
{
public:
A(){cout << "A" << endl;}
virtual ~A(){cout << "~A" << endl;}
};
class B : public A
{
public:
B(){cout << "B" << endl;}
~B(){cout << "~B" << endl;}
};
int main()
{
A *p = new B;
delete p;
system("pause");
return 0;
}
A *p = new B;這句為什麼不new A呢?
這樣寫有沒有什麼現實需要?
有什麼情況會必須這樣寫嘛?
也可以寫 A *p = new A,這樣語法上是沒有錯的。直接 new A 是不會執行 B 的構造函數。
只是代碼上來講,
(1)new B 會執行 B 和 A 的構造函數,類的繼承
(2)這應該是講類的多態,p 可以指定 A 的對象,也可以指向 B 的對象。原因是 B 是 A 的子類!