静态联编

静态联编

  1. 静态联编支持的多态性,我们将其称为编译时的多态性,又称为静态的多态性。
  2. 静态联编是在程序开始执行之前进行的。即在编译,连接的过程中,系统可以根据类型匹配等特征确定在什么地方调用什么函数。
  3. 那么可见,编译时的多态性可以通过函数重载来实现。函数重载的意义在于它可以用同一个名字访问一组相关的函数,能使用户为某一类操作取一个通用的名字。编译程序在编译时决定选择具体的函数段执行,这种方式也利于解决程序的复杂性。静态联编函数调用速度快,效率高,但是编程不灵活。
  4. C++中通过两种工作方式实现编译的多态性:函数重载和运算符重载。它们都属于静态联编。
  5. 分析该程序的运行结果可知,由于程序中完成的是静态联编,在程序编译阶段,基类指针p对于area方法的调用只能绑定到基类的area方法上,虽然程序运行时p指向了不同的派生类对象,但绑定已在编译阶段完成,所以无论运行时p指向什么类型的对象,始终调用的都是基类中的area方法。有时候这种联编方式输出的结果可能并不是我们期望的结果。
  6. 关于类型兼容原则,在实际应用时应注意以下几个方面:
    (1).基类的指针可以指向它的公有派生类对象,但是不允许指向它的私有或保护派生类的对象。
    (2).派生类的指针不允许指向它基类的对象。
    (3).基类的指针指向它的公有派生类对象时,只能用它来直接访问派生类中从基类继承的成员,而不能直接访问公有派生类中定义的新成员。
#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;
		}
		float 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、付费专栏及课程。

余额充值