首页 > 其他 > 详细

关于虚函数,构造函数,非构造函数之间的交叉调用

时间:2017-02-26 17:20:21      阅读:136      评论:0      收藏:0      [点我收藏+]

首先,上代码(还是代码引发的血案)

class A
{
public:
	A(){
		this;
		print();
	}
	virtual void print(){
		this;
		cout<<"A"<<endl;
	}
	void think(){
		this;
		print();
	}
	virtual ~A(){}

private:

};
class  B:public A
{
public:
	B(int temp):A(),x(temp)
{


}
	virtual void print() override
	{
		this;
		cout<<"B"<<endl;
	}
	virtual ~ B(){}

private:
	int x;

};

  

B b(3);
b.think();

 

输出的结果:

A

B

为什么会出现这种情况呢?

 

因为子类并不继承父类的构造函数和析构函数!!!

相反会继承成员函数和虚函数,

在执行子类的构造函数时,会调用父类的构造函数,记住,是调用,也就是A::A(),这样一来,是进入了A类的作用域,this指针也就是A类对象的this指针

而执行成员函数时,因为继承的关系,所以一直处于子类的作用域,

 

记住,只要是子类继承父类,除了构造函数和析构函数之外,根本不存在父类的作用域,this指针全部都是子类对象的指针!!!!

关于虚函数,构造函数,非构造函数之间的交叉调用

原文:http://www.cnblogs.com/YTYMblog/p/6444842.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!