C++允许用空指针访问方法吗?

m_SuperIdler 2003-01-06 02:48:49
大家觉得下面的代码能执行吗?注意pTest是NULL,如果觉得能,请给出理由,不能也请给出理由,我是在2000,VC6上执行的下面代码,在另一台机的XP上也通过了
class CTest
{
public:
TestA()
{
int a = 0;
AfxMessageBox("ddddddd");
}
TestB()
{
int a = 0;
}
}*pTest;

BOOL Tt()
{
pTest = NULL;
pTest->TestA();
}
...全文
154 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
m_SuperIdler 2003-01-06
  • 打赏
  • 举报
回复
cwanter(小菜)
我支持你的观点,但我不支持C++这种做法
cwanter 2003-01-06
  • 打赏
  • 举报
回复
如下代码可以编译过去:
#include <iostream.h>
class CTest
{
public:
TestA()
{
a = 0;
cout<<"ddddddd"<<endl;
}
int a;
};

void main()
{
CTest *pTest = NULL;
pTest->TestA();
}
Bandry 2003-01-06
  • 打赏
  • 举报
回复
不知怎么编译过去,我很菜,编译不过去,当如果pTest为空,肯定不能执行
windcsn 2003-01-06
  • 打赏
  • 举报
回复
学习
cwanter 2003-01-06
  • 打赏
  • 举报
回复
简单说几句,说的不对请高手指教:
C++编译器对类成员变量和成员函数分开处理:成员变量每个对象各有一份拷贝,成员函数的代码在内存只有一份。所以编译器只要知道是哪个类就可以调用成员函数了。指向类对象的指针是指向对象数据成员的指针,通过它调用成员函数只不过是告诉编译器是哪个类的成员函数(虚函数除外)。只定义一个指向类对象的指针,并没有生成类对象,所以this指针为NULL。所以如果成员函数访问成员变量的话,成员变量并不存在,因而程序会出错。
m_SuperIdler 2003-01-06
  • 打赏
  • 举报
回复
静态编译。。。但是调用函数时,不是依靠函数入口地址来调用的吗,既然都指向NULL了,这个指针又是如何来调用函数的呢?
m_SuperIdler 2003-01-06
  • 打赏
  • 举报
回复
能给我一个能执行的理由吗?
cwanter 2003-01-06
  • 打赏
  • 举报
回复
可以执行,因为类非虚成员函数是采用静态编译。但如果成员函数访问类成员变量就会出错。
NetBird_China 2003-01-06
  • 打赏
  • 举报
回复
可以执行。
pTest = NULL ; 注意其地址为0x00000000, 在你执行pTest->TestA 函数时,this指针指向的地址同样为0x00000000

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧