类的函数调用——总结 某东 面试
2015-09-23 23:36
435 查看
从未写过博客,今天开个头吧。是在面试过程中遇到的一个题,写下来做个记录,给自己的面试mark下。
这么简单的题,竟然没答出来,面试官也是惊呆了。
题目如下:
问分别调用 三个函数,会输出什么?
p->printA(); //挂掉
因为p指向空,没有对象,没有this指针,不能调用成员变量
p->printVoid(); //打印 hello world
因为printVoid()只有打印,不需要this指针,所以,成功运行
p->printvirtual(); //挂掉
虚函数,和对象相关,没有对象,肯定不行 (所以,虚函数不能是static的)
总结下:
对于类成员函数言,并不是一个对象对应一个单独的成员函数体,而是此类的所有对象共用这个成员函数体。 当程序被编译之后,此成员函数地址即已确定。而成员函数之所以能把属于此类的各个对象的数据区别开,是靠this指针。函数体内所有对类数据成员的访问,
都会被转化为this->数据成员地方。
这么简单的题,竟然没答出来,面试官也是惊呆了。
题目如下:
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->数据成员地方。
相关文章推荐
- 面试总结
- Java程序员面试中的多线程问题
- 黑马程序员_Java_collections and Arrays(工具类)
- 黑马程序员————JAVA语言基础
- java面试题八 传值传引用
- 黑马程序员————Android中LayoutInflater布局解析的使用
- 【面试】如何找到迷宫出口
- 黑马程序员—java技术blog—第四篇 IO流中其他流概述总结
- java面试题集锦(二)
- 面试---const与#define的区别
- java面试题七 char转int
- 黑马程序员—java技术blog—第二篇 UDP协议及基础应用
- 百度 软件面试 深圳
- java面试题集锦
- 黑马程序员----C 语言学习笔记之机器数、真值、原码、反码、补码
- wow 各职业体验(pvp)
- 黑马程序员----C 语言学习笔记之位运算符
- 百度面试总结
- 《程序员面试金典》--链表相加
- 高效程序员的 7 个共同特征