空指针调用成员函数

来源:互联网 发布:己知功率和电压求电流 编辑:程序博客网 时间:2024/05/23 19:14
试分析一下代码的运行情况即输出:
#include <iostream>using namespace std;class A {public:int m;void print() {  cout << "A\n";  } void B(){int sum = 0;for (int i=0; i<100; i++){ sum += i;}printf("sum=%d\n", sum);}void C(int n){int sum = 0;for (int i=0; i<n; i++){ sum += i;}printf("sum=%d\n", sum);B();}void M(){printf("m=%d\n", m);}};int main(){A *pa = 0;pa->print();pa->B();pa->C(1024);pa->M();return 0;}

如果把代码丢到电脑上运行一遍,可以发现,只有调用M方法的时候程序才奔溃,调用其他方法程序运行正常,表示毫无压力!

是不是很神奇?

分析其原因,其实主要是其他几个函数是可以独立于该类对象运行的,因为这些个方法没有涉及到和类任何相关项,所以在这里可以运行是可以理解的。


总之,如果类的成员函数没有使用到类的成员变量,没有使用到不能单独调用的成员函数,那么该成员函数可以使用该类型的空指针调用而正常运行。(虽然这好像作用不大,不过好像挺好玩的样子)

上述的输出结果是:

Asum=4950sum=523776sum=4950程序调用M方法奔溃了
程序注释分析如下:
#include <iostream>using namespace std;class A {public:int m;void print() {  cout << "A\n";  } void B(){int sum = 0;for (int i=0; i<100; i++){ sum += i;}printf("sum=%d\n", sum);}void C(int n){int sum = 0;for (int i=0; i<n; i++){ sum += i;}printf("sum=%d\n", sum);B();}void M(){printf("m=%d\n", m);}};int main(){A *pa = 0;// 都可以正常调用pa->print();pa->B();pa->C(1024);// 使用了类相关的项,调用失败pa->M();// 所以如果调用的类方法和类不相关,即使该类指针为空,该调用也会成功的return 0;}

0 0
原创粉丝点击