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 }
浙公网安备 33010602011771号