博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C++ - NULL指针调用函数

Posted on 2012-09-25 12:51  神の大司命  阅读(266)  评论(0)    收藏  举报

1. 示例程序1:

 1 class A
 2 {
 3 public:
 4     virtual void f();
 5     virtual void g();
 6     int num;
 7 protected:
 8 private:
 9 };
10 
11 void A::f()
12 {
13     std::cout << "xsj " << std::endl;
14 }
15 
16 void A::g()
17 {
18     num = 9;
19     std::cout << num << " hello" << std::endl;
20 }
21 
22 int main()
23 {
24     A * p1 = NULL;
25     p1->f(); // 运行时错误,程序崩溃,原因是调用虚函数,需要虚函数表,而虚函数表是在对象构造时创建的,因此需要有对象存在
26     p1->g(); // 运行时错误,程序崩溃
27 
28     return 0;
29 }

2. 示例程序2:

 1 class A
 2 {
 3 public:
 4     void f();
 5 protected:
 6 private:
 7 };
 8 
 9 void A::f()
10 {
11     std::cout << "hello A" << std::endl;
12 }
13 
14 class B : public A
15 {
16 public:
17     void g();
18     void k();
19 
20     std::string s;
21 protected:
22 private:
23 };
24 
25 void B::g()
26 {
27     std::cout << "hello B" << std::endl;
28 }
29 
30 void B::k()
31 {
32     s = "xsj";
33     std::cout << "hello " << s << std::endl;
34 }
35 
36 int main()
37 {
38     B * p = NULL; // NULL指针
39     p->f(); // ok: 打印hello A
40     p->g(); // ok: 打印hello B
41     p->k(); // error: 运行时错误,但是编译不报错
42 
43     return 0;
44 }