c++学习虚函数,动态多态性,动态联编

#pragma once
/*******************************
*虚函数的实现
*虚函数:允许函数调用与函数体之间联系在运行时才建立,是现实动态联编的基础
*派生后可以在类族中实现运行时多态(动态多态性)
*动态联编,程序运行后在进行联编
********************************/
#include <iostream>
using namespace std;
class Point
{
private:
	int X, Y;
public:
	Point(int X = 0, int Y = 0)
	{
		this->X = X, this->Y = Y;
	}
	virtual double area()//虚函数
	{
		return 0.0;
	}

	// double area()//若不是虚函数,可以看一下区别
	//{
	//	return 99;
	//}
};

const double PI = 3.14159;

class Circle:public Point
{
public:
	Circle(int X, int Y, double R) : Point(X, Y) 
	{
		radius = R;
	}
	double area()//重定义area函数
	{
		return PI * radius*radius;
	}

private:
	double radius;
};

void virtulfuncionmain()
{
	Point P1(10, 10);
	cout << "P1.area=" << P1.area() << endl;
	Circle C1(10, 10, 20);
	cout << "C1.area=" << C1.area() << endl;
	Point *Pp;//指针对象
	Pp = &C1;//按照类型兼容,将派生类对象地址赋给指向基类的指针;
	cout << "Pp->area()=" << Pp->area() << endl;//若基类中area不是虚函数,这Pp->area()会调用基类Point的成员函数area(因为Pp类型为Point)
	                                            //此时基类中area是虚函数,动态联编,此时Pp->area()会调用指针实际指向对象C1的成员函数area;
	                                            //静态联编通常是重载,函数模板;在编译时通过参数类型和参数个数就确定了代码和操作的关系;(静态多态性)
	Point &Rp = C1;                            //引用对象时同上
	cout << "Rp.area=" << Rp.area() << endl;
}




int main()
{
	virtulfuncionmain();//学习虚函数,实现动态联编

}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值