第三章、多态性

第三章、多态性

1.1、虚函数

一、多态性
  • 同一消息发给不同对象执行不同操作
  • 在c++中,多态性表现形式之⼀是:具有不同功能的函数⽤同⼀个函数名,这样就可以⽤⼀个函数名调⽤不同内容的函数
  • C++中的多态性分为两类:编译时的多态性和运行时的多态性。编译时的多态性是通过函数重载和模板体现的,其实现机制称为静态绑定;运行时的多态性是通过虚函数体现的,其实现机制称为动态绑定。
二、虚函数
1、虚函数

虚函数的作⽤是允许在派⽣类中重新定义与基类同名的函数,并且可以通过基类指针或引⽤来访问基类和派⽣类中的同名函数

virtual 函数类型 函数名(形参表){
	函数体;
}
  • 只有类的成员函数才能声明为虚函数
  • 虚函数不能是静态成员函数,也不能是友元函数
  • 若在基类中定义虚函数,在派生类中还需重新定义
  • 构造函数不能是虚函数,析构函数可以是虚函数
  • 在基类中⽤virtual声明成员函数为虚函数。在类外 定义虚函数时,不必再加virtual
2、虚析构函数

定义基类的析构函数是虚析构函数,当程序运行结束时,通过基类指针删除派生类对象时,先调用派生类析构函数,然后调用基类析构函数

class A{
public:
	~A(){
		cout<<"A::~A() is called."<<endl;
	}
	A(){
		cout<<"A::A() is called."<<endl;
	}
}
class B:public A{
private:
	int *ip;
public:
	B(int size=0){
		ip=new int[size];
		cout<<"B::B() is called."<<endl;
	}
	~B(){
		cout<<"B::~B() is called."<<endl;
		delete []ip;
	}
};
int main(){
	A *b=new B(10);
	delete b;
	return 0;
}
输出:
A::A() is called.
B::B() is called.
A::~A() is called.

如果A的析构函数为:
virtual ~A(){
		cout<<"A::~A() is called."<<endl;
}
则输出为:
A::A() is called.
B::B() is called.
B::~B() is called.
A::~A() is called.

1.2纯虚函数和抽象类

一、纯虚函数
1、定义
virtual 函数类型 函数名 (参数表)=0;
2、特点
  • 纯虚函数没有函数体
  • 最后⾯的 =o并不表示函数返回值为o,它只是起形式 上的作⽤,通知编泽系统:在这⾥声明⼀个虚函 数,留待派⽣类中定义
二、抽象类
1、定义

类中至少含有一个纯虚函数

2、特点

抽象类⽆法建⽴对象

1.3静态联编和动态联编

一、静态联编

程序运行之前,在编译阶段就已经确定下来到底要使用哪个函数

二、动态联编

在程序运行时确定对象所调用的函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值