动态联编与虚函数

博客介绍了动态联编,即程序运行时确定调用函数,它提高编程灵活性和易维护性,但调用速度慢。虚函数是实现动态联编的基础,是动态重载方式,允许运行时建立函数调用与函数体关系,还说明了虚函数声明格式及特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态联编

  • 有时候我们并不希望某些环节在编译阶段完成,而需要它在程序运行时才可以确定将要调用的函数,称为动态联编。动态联编提高了编程的灵活性和程序的易维护性,但与静态联编相比,函数调用速度慢。

  • 虚函数是实现动态联编的基础,它是一种动态的重载方式,它允许在运行时建立函数调用与函数体之间的关系。

  • 虚函数是一个在基类中声明为virtual的函数,并在一个或多个派生类中被重新定义的成员函数,虚函数的声明格式如下:
    virtual <返回值类型> <函数名>(<参数表>);

  • 基类中声明为virtual的函数一般在派生类中需要重新定义,在重新定义时,参数的类型和个数必须相同,一旦一个函数被声明为虚函数,则无论声明它的类继承了多少层,在每一层派生类中该函数都继续保持虚函数的特性。

  • ps:虚函数与重载不同,虚函数的参数类型个数完全相同。

#include <iostream>

using namespace std;

//动态联编-虚函数 
class Shape{
	int x;
	int y;
	public:
		Shape(int px,int py):x(px),y(py)
		{
			cout<<"construct Shape"<<endl;
		}
		virtual float area() //基类中的area方法声明为虚函数
		{
			return 0;
		}
};

class Rectangle:public Shape{
	int w;
	int h;
	public:
		Rectangle(int px,int py,int pw,int ph):Shape(px,py),w(pw),h(ph)
		{
			cout<<"construct Rectangle"<<endl;
		}
		float area()
		{
			return w*h;
		}
};

class Circle:public Shape{
	int r;
	public:
		Circle(int px,int py,int pr):Shape(px,py),r(pr)
		{
			cout<<"construct Circle"<<endl;
		}
		float area()
		{
			return 3.14*r*r;
		}
};
int main()
{
	Rectangle a(30,40,4,8);
	Circle b(30,40,4);
	Shape *p=&a;
	cout<<a.area()<<endl;
	cout<<p->area()<<endl;
	p=&b;
	cout<<b.area()<<endl;
	cout<<p->area()<<endl;
	return 0;
}

运行结果:
/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值