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

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


#include <stdio.h>


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


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



请大家说说各自的看法。
...全文
2263 108 打赏 收藏 转发到动态 举报
写回复
用AI写文章
108 条回复
切换为时间正序
请发表友善的回复…
发表回复
海嵌 2006-09-19
  • 打赏
  • 举报
回复
class A
{
public:
void show( const char * szText )
{
if(szText == NULL) return;
printf( szText );
}
};
abcwangdragon 2006-09-19
  • 打赏
  • 举报
回复
不明白 为什么总是有很多人对人不对事,就算楼主C++学得不好,说出一个他一个想法给大家讨论讨论,有什么不好。哪有技术完人。
magicalking 2006-09-19
  • 打赏
  • 举报
回复
偶也支持一下楼主,一次给这么多分,呵呵,偶要1分
hkw1113 2006-09-19
  • 打赏
  • 举报
回复
mark
kanshu123 2006-09-19
  • 打赏
  • 举报
回复
呵呵,
涨知识了
kingcalf 2006-09-18
  • 打赏
  • 举报
回复
哈哈 热闹热闹

C++让人“恶心”的地方多着呐,但这是C++的设计原则所需要的啊。
sswweett 2006-09-18
  • 打赏
  • 举报
回复
支持一下楼主。
问题提出来说明楼主有思想。
C++只按照自己的数据和代码内存分配的方法来实现OO,NULL->Function()确实没有体现“自然界的客观逻辑”。但这也是C++高效的原因,也是其隐患。难以想像如果C++所有的函数都用虚函数的效率。。。
al0n9 2006-09-18
  • 打赏
  • 举报
回复
楼主只是问了一个问题而已嘛,竟然被这么多人鄙视,同情楼主
freefishmj 2006-09-18
  • 打赏
  • 举报
回复
好贴啊!!!抛砖引玉
powerpretty 2006-09-18
  • 打赏
  • 举报
回复
如果这段代码可以用java实现的话,它会报空指针异常。看来楼主还没有把类的实质搞清楚。
A * p = NULL;
p->show();
p都为null,怎么可能找到show方法呢?
zenny_chen 2006-09-18
  • 打赏
  • 举报
回复
我不想多说什么………………

请那些认为C++“恶心”的人在此看看,看看Java的“恶心”吧!!!!!!!!!

以下程序在NetBeans5.0中执行:

class Test
{
public Test()
{
}

public static void Hello()
{
System.out.println("Hello, world!");
}

public void Moo()
{
System.out.println("Booooooooo!!!!");
}
}


public class Main {

/** Creates a new instance of Main */
public Main() {
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here

Test ch = null;

ch.Hello(); // OK

ch.Moo(); // Compiling succeeds. Report exception in run-time.
}
}

为什么Java在对象引用为空的时候会出现运行时异常?

因为Java的每个成员方法都是 virtual 的,那些自以为是的好好想清楚了!!!!!!
看看调用类方法仍然OK,没错。
zenny_chen 2006-09-18
  • 打赏
  • 举报
回复
我不想多说什么………………

请那些认为C++“恶心”的人在此看看,看看Java的“恶心”吧!!!!!!!!!

以下程序在NetBeans5.0中执行:

class Test
{
public Test()
{
}

public static void Hello()
{
System.out.println("Hello, world!");
}

public void Moo()
{
System.out.println("Booooooooo!!!!");
}
}


public class Main {

/** Creates a new instance of Main */
public Main() {
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here

Child ch = null;

ch.Say(); // OK

ch.Moo(); // Compiling succeeds. Report exception in run-time.
}
}

为什么Java在对象引用为空的时候会出现运行时异常?

因为Java的每个成员方法都是 virtual 的,那些自以为是的好好想清楚了!!!!!!
看看调用类方法仍然OK,没错。
fsaok 2006-09-18
  • 打赏
  • 举报
回复
发言都很好,学习中
BluntBlade 2006-09-18
  • 打赏
  • 举报
回复
OO模型和零地址有什么关系?
bbsRoson 2006-09-18
  • 打赏
  • 举报
回复
精神有问题
varphone 2006-09-18
  • 打赏
  • 举报
回复
按照OO模型,这道题应该是不能通过的。
yisong_net 2006-09-18
  • 打赏
  • 举报
回复
学习了~~~
seawalt 2006-09-18
  • 打赏
  • 举报
回复
真恶心,Pascal居然也是这样!~
tangwuquan 2006-09-17
  • 打赏
  • 举报
回复
零地址也是地址阿,我觉得C++这样做是为了能够表示更广泛和更普遍的意义,就像一个函数一样把他的自变量扩展到整个复数的范围!
langzi8818 2006-09-17
  • 打赏
  • 举报
回复
这么多人,这么点分,的确恶心了点
加载更多回复(88)

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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