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

从未写过博客,今天开个头吧。是在面试过程中遇到的一个题,写下来做个记录,给自己的面试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->数据成员地方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值