您的位置:首页 > 职场人生

类的函数调用——总结 某东 面试

2015-09-23 23:36 435 查看
从未写过博客,今天开个头吧。是在面试过程中遇到的一个题,写下来做个记录,给自己的面试mark下。

这么简单的题,竟然没答出来,面试官也是惊呆了。

题目如下:

class A
{
public:
int a;
void printA()
{
printf("hello world a = %d\n", a);
}
void printVoid()
{
printf("hello world void\n");
}
virtual void printvirtual()
{
printf("hello world virtual\n");
}
};

int main(int argc, char *argv[])
{
A *p = 0;
p->printA();
p->printVoid();
p->printvirtual();
return 0;
}

分别调用 三个函数,会输出什么?

p->printA(); //挂掉

因为p指向空,没有对象,没有this指针,不能调用成员变量

p->printVoid(); //打印 hello world

因为printVoid()只有打印,不需要this指针,所以,成功运行
p->printvirtual(); //挂掉

虚函数,和对象相关,没有对象,肯定不行 (所以,虚函数不能是static的)

总结下:

对于类成员函数言,并不是一个对象对应一个单独的成员函数体,而是此类的所有对象共用这个成员函数体。 当程序被编译之后,此成员函数地址即已确定。而成员函数之所以能把属于此类的各个对象的数据区别开,是靠this指针。函数体内所有对类数据成员的访问,
都会被转化为this->数据成员地方。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: