//CeShi.h
#ifndef CESHI_H
#define CESHI_H
#include
using namespace std;
class CeShi
{
private:
int a;
protected:
int b;
public:
CeShi(){cout << "CeShi()!\n";}
void display();
void show();
virtual ~CeShi(){ cout << "~CeShi()!\n"; }
};
#endif
//CeShi.cpp
#include "CeShi.h"
#include
using namespace std;
void CeShi::display()
{
cout << "YES"<< endl;
}
void CeShi::show()
{
cout << "Show() CeShi!";
cout << endl;
}
//main.cpp
#include
#include "CeShi.h"
using namespace std;
CeShi *p;
int main ()
{
p->show();
return 0;
}
//这个运行的结果是:Show() CeShi!
//请问下为什么?谢谢。
因为Show不是一个虚函数,因此对这个函数的调用是以函数名称的形式调用的,而且在你的这个函数中没有使用类中定义的数据,因此完全没有使用到this指针,当然也就不会出错了。
你去看反汇编的结果自然就明白了。
如果你在Show函数里引用了类中定义的变量,肯定就崩溃了
只有你给的这个输出,没有类的构造函数中的输出:CeShi()! 吗?
这不太可能吧,p 定义了没有初始化,p应该是空。对空指针的调用,应该直接弹出异常才对。
CeShi *p;指针并没有置空啊;这么写CeShi *p = NULL;运行肯定崩溃,没有给类对象分配内存空间
虽然是空指针,但这是cpp的一个特性。因为函数是绑定在类的,所以根据指针类型可以找到函数地址。所以可以访问,但是这种情况不能访问任何对象成员,否则就会却异常