C++一个让我恶心的行为!!!

Big_foolcat 2006-09-15 01:55:36
请在你所用的编译器上编译并运行这段代码,并看看它的行为:


#include <stdio.h>


class A
{
public:
void show( const char * szText )
{
printf( szText );
}
}


int main()
{
A * p = NULL;
p->show();
return 0;
}



请大家说说各自的看法。
...全文
398 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Big_foolcat 2006-09-16
  • 打赏
  • 举报
回复
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

1、首先,鄙视一下穿着几条裤子或几颗星的在这自以为是,如果您真是个牛人,整天泡在这论坛上就好好帮新手解决几个问题,别没事这在瞎扯

2、我是92年从DOS时代就写程序到现在的程序员,自认为汇编还过得去,用C++的时间可能比某些人要长些,至于内存布局、虚函数表这样的说法就不要在这来糊弄人了

3、这个问题只是想表明一下C++编译器的一个缺陷(至少我认为这在语意上有缺陷)

4、开帖是来找人讨论的,并不是想声讨什么,更不是想来找抽

5、那些嘴里吐不出几颗象牙的请惜墨,并就此打住!

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
LuoGD 2006-09-16
  • 打赏
  • 举报
回复
):
ribut9225 2006-09-16
  • 打赏
  • 举报
回复
LZ如果去VC里发这样的贴会是什么结果???

不知道蒋晟(MVP)会怎么对待这种行为??

LZ即然看不起C++,完全可以不用嘛
还可以VB、C#嘛

BCB2006 2006-09-15
  • 打赏
  • 举报
回复
不是超牛不要起这样的标题,否则会被xx到天亮的...
lqglaive 2006-09-15
  • 打赏
  • 举报
回复
xiaoshi0(Rain)说得有理!
yf2100 2006-09-15
  • 打赏
  • 举报
回复
受不了,LZ先去好好学习一下类吧


#include <stdio.h>
#define SO_BIG 2E9

class A
{
public:
int shit;
void show( const char * szText )
{
printf( szText );
}
};


int main()
{
A * p = NULL;
p->show( "hello world." );
p->shit=SO_BIG; // It's really so-big-shit
return 0;
}
ccrun.com 2006-09-15
  • 打赏
  • 举报
回复
呵呵,一笑而过。
BlueDeepOcean 2006-09-15
  • 打赏
  • 举报
回复
有些胡闹……
jiangshx 2006-09-15
  • 打赏
  • 举报
回复
对楼主挨批深表同情,学无止境!
  • 打赏
  • 举报
回复
在逻辑上,确实有一点问题。
但是由于实现的缘故,方法在编译的时候已经生成了,这是允许的。
在其他语言中,比如OP,也允许这种使用。
lurel 2006-09-15
  • 打赏
  • 举报
回复
我弄不清楚恶心到哪里,而是搂主对C++没学好。
xiaoshi0 2006-09-15
  • 打赏
  • 举报
回复
像你这么说,那static函数连没有指针的时候都可以调用呢,不是更怪!
xiaoshi0 2006-09-15
  • 打赏
  • 举报
回复
废话,你调用的方法都没有涉及到A类里面的成员,当然不出异常了。

类中的函数和数据本来就存在不同的地方的。只要能找到函数的指针,就可以调用函数。

你弄个变量放在类里面,然后你调用那个函数改改值试试!
Big_foolcat 2006-09-15
  • 打赏
  • 举报
回复
发得太急,代码有问题,现在改一下:

#include <stdio.h>

class A
{
public:
void show( const char * szText )
{
printf( szText );
}
};


int main()
{
A * p = NULL;
p->show( "hello world." ); //这里访问的是NULL对象的show !!!
return 0;
}
Maconel 2006-09-15
  • 打赏
  • 举报
回复
楼主想说的是,当一个类实例为NULL时,还是可以调用它的成员函数。
这本来就是允许的,因为函数代码是所有类共有的,一个类的实例,只是包含了成员变量而已。甚至在某些特定的场合,这还是一个代码技巧。
Big_foolcat 2006-09-15
  • 打赏
  • 举报
回复
晕了,p->show("asdf"); 的参数也漏了,我想说明的是,它在运行时居然无异常,我访问的是一个NULL指针呀,汇编里它没访问this指针不会异常,但实在不理解它这样的行为。
fanswc 2006-09-15
  • 打赏
  • 举报
回复
他欠抽
xiaoshi0 2006-09-15
  • 打赏
  • 举报
回复
你想说明什么?你这个代码根本就不对,编译都不能通过。

class定义后面没有;号

Show方法还没有参数。

用NULL指针调用方法,出现异常

给printf函数传递NULL, 出现异常

你到底想说什么?
Big_foolcat 2006-09-15
  • 打赏
  • 举报
回复
补充,上边的代码有误,请在class A定义后补上个分号, class A{};

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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