虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承
虚函数:虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。是C++中多态性的一个重要体现,利用基类指针访问派生类中的成员 函数,这种情况下使用虚函数,这种情况下采用的是动态绑定技术。
虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的一般形式:
virtual 函数返回值类型 虚函数名(形参表)
{ 函数体 }
动态绑定:基类指针是调用派生类的中的成员函数还是调用基类中的成员函数要到程序运行时确定。主要要看指针所指向的对象。
纯虚函数:纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”
virtual void funtion1()=0
虚基类、抽象类:包含纯虚函数的类称为抽象类。由于抽象类包含了没有定义的纯虚函数,所以不能定义抽象类的对象。
虚函数继承:
虚函数继承就是覆盖。即基类中的虚函数被派生类中的同名函数所覆盖。 是实现多态的方法。
class parent
{
public:
vitual void foo(){cout < <"foo from parent";};
void foo1(){cout < <"foo1 from parent";};
};
class son:public parent
{
void foo(){cout < <"foo from son";};
void foo1(){cout < <"foo1 from son";};
};
int main()
{
parent *p=new son();
p->foo();
p->foo1();
return 0;
}
其输出结果是:
foo from son,foo1 from parent
虚继承:
解决多重继承中派生类成员函数调用模糊问题。比如类A中有一个函数print(),类B继承A,类C继承A,类D继承类B和类C,这个时候,类D中就有两个print函数,一个是 从B继承得到的,一个是从C继承得到的,则,类D的对象调用print函数就会出现print模糊的编译错误。解决办法:类B虚拟继承A。类C虚拟继承A,类D继承B,C时,只拷 贝A中的数据成员和函数成员一次,再遇到拷贝时候就忽略了!
虚继承就是为了节约内存的,他是多重继承中的特有的概念。适用与菱形继承形式。
如:类B、C都继承类A,D继承类B和C。为了节省内存空间,可以将B、C对A的继承定义为虚拟继承,此时A就成了虚拟基类。
class A;
class B:public vitual A;
class C:public vitual A;
class D:public B,public C;
虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承相关推荐
- C++多继承中重写不同基类中相同原型的虚函数
在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数.下面就是一个例子: class CBaseA { public: virtual void TestA(); }; class ...
- 6-4 派生类使用基类的成员函数
6-4 派生类使用基类的成员函数 分数 5 全屏浏览题目 切换布局 作者 李廷元 单位 中国民用航空飞行学院 按要求完成下面的程序: 1.定义一个Animal类,成员包括: (1)整数类型的私有数据成 ...
- C++ 类继承:构造函数与析构函数调用顺序,派生类和基类之间的特殊关系,公有继承及其他
文章目录 一.派生类构造函数与基类构造函数 二.创建与销毁派生类对象时,构造函数和析构函数的调用 三.派生类和基类之间的特殊关系 四.公有继承 (一).何为公有继承 (二).多态公有继承 (三).虚函 ...
- 派生类对基类成员的访问控制之公有继承
公有继承 前面说过,派生类从基类继承时有三个步骤, 第一个步骤是吸收基类成员,吸收了基类中除构造函数和析构函数之外的所有数据成员和函数成员, 第二个步骤就是修改基类成员,包括修改对基类成员的访问属性和 ...
- java设置虚基类的目的_设置虚基类的目的是( )。
有pqueue.h如下 #ifndef HEADER_PQUEUE_H#define HEADER_PQUEUE_Htypedef struct_pqueue{ pitem *items; ...
- python类中调用另一个程序函数_Python:如何在另一个类中调用函数
我被一些python脚本困住了 https://python4kids.brendanscott.com/2014/12/02/hooking-up-the-sunfish-chess-engine- ...
- python init函数_在Python中解释类__init __()函数内部和外部的变量。
类变量与实例变量 Python中类__init__函数外部的所有变量都是类变量,而内部的所有变量都是实例变量.通过检查以下代码,可以更好地理解类变量和实例变量之间的区别 例class MyClass: ...
- 为什么基类的析构函数是虚函数?
1.第一段代码 #include<iostream> using namespace std; class ClxBase{ public:ClxBase() {};~ClxBase() ...
- C++中基类的析构函数为什么要用virtual虚析构函数
知识背景 要弄明白这个问题,首先要了解下C++中的动态绑定. 关于动态绑定的讲解,请参阅: C++中的动态类型与动态绑定.虚函数.多态实现 正题 直接的讲,C++中基类采用virtual虚析构函数是 ...
- c++ 纯虚成员函数+抽象基类
公共接口是指一系列成员函数的集合,支持该接口的类必须以合适的方式重新定义这些成员函数,否则就无法创建对象.C++ 中可以通过抽象基类来实现公共接口,为了介绍抽象基类,我们需要先来了解一下纯虚成员函数. ...
最新文章
- 力挺Python!同是程序员,为啥同事年前就实现了财务自由?
- 将excel中的数据写入xml
- python网上编程课程-少儿编程 为你解读Python编程课程
- python瀑布图怎么做_利用Python绘制数据的瀑布图的教程
- 华为擎云w510_苹果 iPhone 12 全家桶谍照曝光;华为台式机擎云W510现身官网
- mysql 字符串替换:处理历史稿件中的图片路径
- linux 下使用 curl post
- 【Verilog HDL学习之路】第一章 Verilog HDL 数字设计总论
- 多线程的全局变量与局部变量
- 框架的特性_Go 语言 Web 框架 Echo 系列:基础篇—通过一个例子串联各特性
- Redis学习---(13)Redis 发布订阅
- linux mtime参数,linux find mtime参数详解
- python力导向图论文_力导向图(关系图) echarts的运用
- 一、NPP/VIIRS夜间灯光数据校正一理论介绍
- 翻译润色、论文英语修改、语法建议、3个软件-研究生必用
- Win10如何为命令提示符增加输入命令获取管理员权限功能?
- 两个队列实现一个栈-----队列面试题3
- 自定义elementUI select下拉框样式
- mysql批量导出_mysql批量导出导入
- Yank-Note笔记软件的37个特色功能,值得下载
热门文章
- Ubuntu支持LinuxONE大型机:为云而生的强强新组合
- 安卓逆向-修改APK-战斗直接胜利
- ffmpeg学习:滤镜(实现视频缩放,裁剪,水印等) -
- Altium Designer软件导出原理图和PCB图的PDF形式
- 苹果手机怎么在照片上添加文字_手机上照片怎么制作视频
- meta20 无法安装 google play_不ROOT不刷机,小米手机如何安装谷歌 GMS 三件套
- 【C语言】位段(详解)
- 计算机组装与维护双系统安装,给你的电脑安装一个不可见的WINPE救援系统(独立启动双系统)...
- Xilinx MIG IP核app_wdf_rdy信号一直为低
- SAP批量修改物料标准成本