C++学习笔记 -动态绑定_hawkol_新浪博客

静态绑定是根椐编译时声明的变量类型,来决定调用哪个类型的函数;

动态绑定是根椐运行时实际赋给变量的值,来决定调用的是基类类或派生类的函数​。

要实现动态​绑定,必须用到虚函数,没有虚函数参与实现的多态性都不是动态绑定。但是虚函数不是实现动态绑定的唯一条件,实现动态绑定还与虚函数的访问方式有关。只有通过对象指针或对象引用 才能调用虚函数实现动态绑定。​

#include

using namespace std;

class Transport

{

public:

virtual void setspeed(int s)//定义虚函数,设置参数

{

speed=s;

cout<<"in basic setspeed()"<<endl;

}

virtual void transport()//定义虚函数,显示状态

{

cout<<"basic transport in"<<speed<<endl;

}

private:

int speed;//私有成员

};

class Car:public Transport//public方式继承Transport

{

public:

virtual void setspeed(int s)//定义虚函数,设置参数

{

speed=s;

cout<<"in Car setspeed()"<<endl;

}

virtual void transport()//定义虚函数,显示状态

{

cout<<"Car transport in"<<speed<<endl;

}

private:

int speed;

};

class Trian:public Transport//public方式继承Transport

{

public:

virtual void setspeed(int s)//定义虚函数,设置参数

{

speed=s;

cout<<"in Trian setspeed()"<<endl;

}

virtual void transport()//定义虚函数,显示状态

{

cout<<"Trian transport in"<<speed<<endl;

}

private:

int speed;

};

void print(Transport & t)//全局函数,参数是基类的引用

{

t.transport();

}

void main()

{

Transport *pt;//定义基类对象指针

Car c;

pt=&c;//指针指向对象Car的对象c

pt->setspeed(60);//访问相应虚函数

Trian t;

pt=&t;

pt->setspeed(200);//指针指向对象Trian的对象t

print(c);//调用全局函数

print(t);

}

注意:多态性机制提供了接口(函数名)与函数实现(函数体)分离的方法。这大大方便了软件的设计和维护,但多态性需要更多的额外开销。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值