面试题

来源:互联网 发布:甘肃金润软件 编辑:程序博客网 时间:2024/05/08 05:21
1、
#include <iostream>class Test{public:void print(){printf("print null\n");}void set(int n){m_val = n;printf("%d\n ",m_val);}private:int m_val;};int main(){Test *a =NULL;a->print();a->set(10);    return 0 ;}

编译通过,运行输出:print null

第二条不成功,提示:Access violation writing location 0x00000000.

print是一个类级别的东西,也就是说它和类的实例(或者类的对象)没有任何关系,这也就是“并未使用this指针”,在这种情况下,print仅与a的类型有关,而不管a是什么东西,实际上,你甚至可以写下面这样的代码:

((Test*)123456)->print();

对象级别的东西,比如类中的某个非静态成员变量,这种东西和类的实例有关,因此它使用this指针,这样的情况下,就不能像上面那么写了。