多态性

1绑定是把函数名和函数体关联起来的过程,

2静态多态性又叫编译时多态性,即系统在编译时就确定了通过函数名所调用的函数体(早期联边),它通过函数重载实现

3动态多态性又叫运行时多态性,编译时无法确定绑定对象,必须等到程序运行时才能关联到需要执行的函数体(滞后联边),虚函数和继承

4虚函数用virtual修饰的成员函数,不能是普通函数,在c++中如果在基类中定义了虚函数,那么在其派生类中的同名函数(2者函数原型完全相同)必定也是虚函数。

4虚函数的优点———通过使用指向基类对象的指针或者引用来调用该虚函数可实现动态调用

5动态绑定的2个条件:1是使用虚函数2是使用指向基类的指针或者引用调用该虚函数

#ifndef _SCLASS4_1_CSHAPE_H_
#define _SCLASS4_1_CSHAPE_H_
#include <iostream>
using namespace std;
class CShape
{
public:
	CShape(double x,double y,double z);
	~CShape(){};
	virtual void Show();//动态绑定需要虚函数
protected:
	double m_x;
	double m_y;
	double m_z;
};
class CCircle:virtual public CShape
{
public:
	CCircle(double x,double y,double z,double radius);
	~CCircle(){};
	void Show();
protected:
	double m_radius;
};
#endif
#include "sclass4_1_CShape.h"
CShape::CShape(double x,double y,double z):m_x(x),m_y(y),m_z(z)
{;}
void CShape::Show()
{
    cout<<"x="<<m_x<<"  y="<<m_y<<"  z="<<m_z<<endl;
}
void CCircle::Show()
{
    cout<<"x="<<m_x<<"  y="<<m_y<<"  z="<<m_z<<"  radius="<<m_radius<<endl;
}
CCircle::CCircle(double x,double y,double z,double radius):CShape(x,y,z),m_radius(radius)
{
    ;
}
#include "sclass4_1_CShape.h"
void main()
{
    CShape *p;
    CShape b(1,2,3);
    CCircle c(5,54,6,6);
    p=&b;
    p->Show();
    p=&c;
    p->Show();//有virtual实现了动态绑定正确调用否则的话Show只能继承来自基类中的Show()无法正确运行
    cin.get();

}

基类的引用

在.H文件中加上

void Reference(const CShape &abc)
{
	abc.Show();
}

main函数改为

void main()
{
	CShape a(12,3,4);
	CCircle b(5,6,7,7);
	Reference(a);
	//Reference(b);
	cin.get();
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值