#include <iostream>
using namespace std;
class A
{
int i;
public:
void Hello()
{
cout << "hello" << endl;
}
virtual void vHello()
{
cout<<"vhello"<<endl;
}
};
int main()
{
A* p = NULL;
p -> Hello();
p -> vHello();
}
上面代码会输出“hello”,然后就不会再有输出。
1、为什么p是空指针,还有输出
在上面的程序中,p 明明是一个空指针,为何通过它还能正确调用 A 的成员函数 Hello 呢?p->Hello()
实质上p应该是Hello(p)
,在 Hello 函数中,cout 语句没有用到 this 指针,因此依然可以输出结果。如果 Hello 函数中有对成员变量的访问,则程序就会出错。
http://c.biancheng.net/view/170.html
2、为什么虚函数不输出
虚函数在类中是通过虚函数表来存放的,虚函数表就是指针数组,所以上面对虚函数的访问等价于
*(p->vptr[1])(p);
由于p为NULL,所以无法找到虚函数指针,也就没法调用虚函数了