您的位置:首页 > 编程语言 > C语言/C++

c++类中的虚函数

2015-07-13 16:49 260 查看
类中虚函数的作用
在介绍虚函数的作用之前,我们首先介绍下静态联编和动态联编。

注意: 当基类对象指针指向公有派生类的对象时,它只能访问从基类继承下来的成员,而不能访问派生类中定义的成员。

静态联编-编译阶段就将函数实现和函数调用关联起来。C语言中,所有联编都是静态联编。
动态联编-在程序运行阶段才将函数实现和函数调用关联起来。c++中一般都是使用静态联编,但是涉及到多态性和虚函数,就必须使用动态联编。

c++中引入虚函数就是为了实现多态性,面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为。

虚函数使用的基础是派生类和基类之间存在的赋值兼容关系。基类与派生类的赋值兼容关系体现在1)派生类对象直接向基类赋值2)派生类对象初始化基类对象引用3)派生类对象的地址直接赋给基类对象的指针4)函数形参是基类对象或基类对象的引用时,在调用函数时,可以用派生类的对象作为实参
void function(ABCBase &base)
{
	base.showABC();
}
int main()
{
	ABCBase base("A");//ABCbase为基类/父类
	base.showABC();

	X x("B");//派生类
	base = x;//派生类对象直接向基类赋值
	base.showABC();

	ABCBase &base1 = x;//派生类对象初始化基类对象引用
	base1.showABC();

	ABCBase *base2 = &x;//派生类对象的地址直接赋值给基类对象的指针
	base2->showABC();

	function(x);//派生类的对象作为实参

	return 0;
}
注意:派生类与基类的赋值兼容前提是派生类公有继承于基类。言而总之,使用虚函数,派生类必须是从基类公有派生。
c++类中引用虚函数就是为了实现多态性,对于不同的对象对同一消息产生不同的行为。基类中的某成员函数被声明为虚函数时,在它的派生类中可以重新定义,但是重新定义过的函数的函数名、返回类型、参数个数、参数类型的顺序都必须和基类中的原型完全相同。另外,派生类中定义可以省略关键字virtual。因为系统会根据定义的函数原型是否和虚函数原型完全一致来判断是否为虚函数。

注释几点:1、虚函数必须是所在类的成员函数而不能是友元函数,也不能是静态成员函数。2、内联函数不能是虚函数 3、构造函数不能是虚函数,析构函数可以是虚函数。4、派生类的析构函数与基类的析构函数名字不同,但是如果将基类的析构函数定义为虚函数,由该基类派生而来的所有派生类的析构函数都自动成为虚函数。

纯虚函数的一般形式:

virtual 返回类型 函数名(形参表)=0。纯虚函数不具有函数功能,不能被调用,告诉系统这是纯虚函数。纯虚函数一般定义在基类中,基类中定义的函数一般不需要实现函数功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: