虚函数,纯虚函数和多态
来源:互联网 发布:mac sudo chown 编辑:程序博客网 时间:2024/06/15 13:06
1.虚函数和纯虚函数(C,C++)
定义方式
虚函数:virtual void fun();可在父类中直接实现和定义父类的对象,也可在子类中重写父类中定义的虚函数。
纯虚函数:virtual void fun()=0;只能在父类(虚基类)中定义,继承的子类必须实现父类中的纯虚函数的功能。
执行方式:执行过程是动态联编的,即在程序运行时进行关联或束定。且动态联编只能通过指针和引用方式来操作虚函数。
共同点:一般是通过定义基类的指针和引用,然后将该指针或引用指向不同的的子类对象,在调用对应的虚函数。
2.多态的定义
多态就是通过类的继承,使得同一个函数可以根据调用它的对象的类型的不同做出不同的响应。定义的父类对象的引用或指针只能访问子类从父类继承来的方法。
在C++中通过虚函数来实现的,在java中,对象变量是多态的,没有虚函数的概念。
如下Java中实现多态的例子:
class Vehicle{ public: void drive();};class Car extends Vehicle{//Java中只有共有继承,用extends表示 public: void drive(){ cout<<"启动轿车"<<endl; }};class Truck extends Vehicle{ public: void drive(){ cout<<"启动卡车"<<endl; }};Vehicle v1;//定义基类对象v1v1=new Car();v1.drive();//输出“启动轿车”v1=new Truck();v1.drive();//输出“启动卡车”在C++实现对态:class Vehicle{ public: virtual void drive()=0;};class Car:public Vehicle{//Java中只有共有继承,用extends表示 public: void drive(){ cout<<"启动轿车"<<endl; }};class Truck:public Vehicle{ public: void drive(){ cout<<"启动卡车"<<endl; }};Vehicle *v1;//定义基类指针v1Car c;Truck t;v1=&c;v1->drive();//输出“启动轿车”v1=&t;v1->drive();//输出“启动卡车”
3.子类和父类的转换 子类对象转父类:可直接利用多态的性质进行转换。 父类转子类:一般先使用instancesof运算符判断能否进行转换(是否有继承关系),然后用(子类type)父类对象的方法进行强制类型转换。 instancesof运算符的使用:A instancesof B,A是类B类型的对象或类B的父类。
- 虚函数,纯虚函数和多态
- 虚函数、纯虚函数和多态
- 虚基类和纯虚函数
- 继承和纯虚函数
- 纯虚函数和纯虚析构
- 虚函数和纯虚函数
- 虚函数和纯虚函数
- 虚函数和纯虚函数1
- 虚函数和纯虚函数区别
- 虚函数和纯虚函数区别
- 虚函数和纯虚函数
- 虚函数和纯虚函数
- 虚函数和纯虚函数
- 虚函数和纯虚函数区别
- 多态性和虚函数、纯虚函数
- 虚函数和纯虚函数
- 虚函数 和 纯虚函数
- 虚函数和纯虚函数
- linux驱动中的阻塞访问方式
- Objective-C 之 @property和@synthesize
- 做一个拾贝壳的小顽童
- 数据压缩--蓝桥杯
- 【转】经典动态规划题集
- 虚函数,纯虚函数和多态
- SETSOCKOPT 设置阻塞SOCKET函数超时时间
- 今天在隧道一车上的一幕
- 异或运算符的巧妙应用
- 如何直接获取 libmicrohttpd 库中POST上来的整个数据
- 关于php查询字符串中带点号的问题
- 什么cdn加速软件好用
- sql分页语句
- 精通git中文版 (连载一)