C++虚函数的简单范例

问题:C++虚拟函数的简单范例

本程序通过VC++ 6.0编译与测试,两段程序分别演示了不使用虚析构函数和使用虚析构函数的结果,具体代码如下:

//不使用虚拟函数
#include <iostream>
using namespace std;

class Base
{
public:
	//virtual //不同点,注意,此时虚拟函数被注释掉了
	void func()
	{
		cout<<"Base function!"<<endl;
	}
};

class Derived: public Base
{
public:
	void func()
	{
		cout<<"Derived function!"<<endl;
	}
};

void foo(Base & b)
{
	b.func();
}

int main()
{
	Base b;
	Derived d;
	Base *p=&d; //父类指针指向子类对象
	Base &br=d; //父类引用指向子类对象
	b.func();//调用父类版本
	d.func();//调用子类版本
	p->func(); //父类指针调取父类版本
	br.func();//父类引用调取父类版本
	foo(d);//把子类对象d传递给父类引用,调取父类版本
	return 0;
}

程序运行结果:


//使用虚拟函数
#include <iostream>
using namespace std;

class Base
{
public:
	virtual void func() //注意,此时使用了虚拟函数
	{
		cout<<"Base function!"<<endl;
	}
};

class Derived: public Base
{
public:
	void func()
	{
		cout<<"Derived function!"<<endl;
	}
};

void foo(Base & b)
{
	b.func();
}

int main()
{
	Base b;
	Derived d;
	Base *p=&d; //父类指针指向子类对象
	Base &br=d; //父类引用指向子类对象
	b.func();//调用父类版本
	d.func();//调用子类版本
	p->func(); //指针指向对象为子类,调用子类版本
	br.func();//引用传递对象为子类,调用子类版本
	foo(d);//把子类对象d传递给父类引用,调取子类版本
	return 0;
}

程序运行结果:


总结:有虚拟函数时父类指针或引用根据所指向的对象的类型来确定调用哪个版本的函数

全部评论

相关推荐

友友们,我实在是不太明白,校招的话现在大多也是提前实习,然后转正也是需要考核的,考核通过才能转正,那这跟实习转正有什么区别啊
苦闷的仰泳鲈鱼刷了1...:提前实习,是让你提前熟悉业务的,后续是入职后可以减少试用期的(大部分是包入职的);转正实习,要是hc不够或者其他原因,让你正式offer可能都没有,这个风险很大。 ---个人看法和了解到的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务