虚函数和纯虚函数的区别是什么?
虚函数(impure virtual)
C 的虚函数主要作用是“运行时多态”,父类中提供虚函数的实现,为子类提供默认的函数实现。
子类可以重写父类的虚函数实现子类的特殊化。
如下就是一个父类中的虚函数:
class A
{
public:
virtual void ss()
{
cout<<"我是基类的虚函数"<<endl;
}
};
纯虚函数(pure virtual)
C 中包含纯虚函数的类,被称为是“抽象类”。抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。
C 中的纯虚函数更像是“只提供申明,没有实现”,是对子类的约束,是“接口继承”。
C 中的纯虚函数也是一种“运行时多态”。
如下面的类包含纯虚函数,就是“抽象类”:
class A
{
public:
virtual void out1(string s)=0; //我是基类的虚函数
};
举个栗子
#include
#include
#include
#include
#include
using namespace std;
class a
{
private:
public:
a(){ //构造函数用内联函数的形式
}
//虚函数
virtual void xhs(){ //这个虚函数必须得在基类中实现
cout<<"我是基类的虚函数"<
} //派生类中可以不写这个函数,但是派生类对象调用时会调用积累的虚函数
//纯虚函数
virtual void cxhs() =0; //这个纯虚函数不在基类中实现,必须在子类中实现
};
class b:public a
{
private:
public:
void xhs(){ //这个是可有可无的
cout<<"我是派生类覆盖基类虚函数的函数"<
} //*
//*
void cxhs(){ //这个是必须有实现的
cout<<"我是派生类覆盖基类虚函数的函数"<
} //* //*
}; //* //*
int main() //* //*
{ //* //*
b c; //* //*
c.xhs(); //* //调用派生类的
c.cxhs();//调用派生类的
}
虚函数和纯虚函数的区别
1)、纯虚函数只有定义,没有实现;而虚函数既有定义,也有实现的代码。
纯虚函数一般没有代码实现部分,如 virtual void print() = 0; 2)而一般虚函数必须要有代码的实现部分,否则会出现函数未定义的错误。
2)、包含纯虚函数的类不能定义其对象,而包含虚函数的则可以。
声明:
本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
虚函数和纯虚函数的区别是什么?相关推荐
- java中所有函数都是虚函数_关于Java:虚拟函数与纯虚函数之间的区别是什么?...
本问题已经有最佳答案,请猛点这里访问. Possible Duplicate: C++ Virtual/Pure Virtual Explained 虚函数和纯虚函数有什么区别? CPP中的纯虚函数与 ...
- c语言中虚函数和纯虚函数,虚函数和纯虚函数的区别是什么?
虚函数和纯虚函数的区别:1.纯虚函数只有定义,没有实现:而虚函数既有定义,也有实现的代码.2.包含纯虚函数的类不能定义其对象,而包含虚函数的则可以. 相关推荐:<C++视频教程> 虚函数( ...
- 一口气搞懂《虚函数和纯虚函数》
学习C++的多态性,你必然听过虚函数的概念,你必然知道有关她的种种语法,但你未必了解她为什么要那样做,未必了解她种种行为背后的所思所想.深知你不想在流于表面语法上的蜻蜓点水似是而非,今天我们就一起来揭 ...
- c++ 虚函数,纯虚函数的本质区别
转载博客:https://mp.weixin.qq.com/s?__biz=MzAxNzYzMTU0Ng==&mid=2651289202&idx=1&sn=431ffd1fa ...
- 虚函数和纯虚函数详解
https://mp.weixin.qq.com/s?__biz=MzAxNzYzMTU0Ng==&mid=2651289202&idx=1&sn=431ffd1fae4823 ...
- 一个例子彻底搞懂C++的虚函数和纯虚函数
学习C++的多态性,你必然听过虚函数的概念,你必然知道有关她的种种语法,但你未必了解她为什么要那样做,未必了解她种种行为背后的所思所想.深知你不想在流于表面语法上的蜻蜓点水似是而非,今天我们就一起来揭 ...
- C++_虚继承_虚函数_纯虚函数(多继承的二义性,多态)
基本信息 每一个类都有一个虚表,以及虚表指针; 虚表的内容是编译器决定的,虚表中用于存放虚函数的指针, 程序运行时的类型信息等; 每个多态对象都存放着一个指向当前类型的虚表的指针, 该指针在构造函数中 ...
- c/c++入门教程 - 2.4.7 多态、函数地址晚绑定(重写,虚函数,纯虚函数,抽象类,虚析构,纯虚析构)
目录 4.7 多态 4.7.1 多态的基本概念(超级重要) 4.7.2 多态的原理刨析(超级重要) 4.7.2 多态案例一:计算器类 4.7.3 纯虚函数和抽象类 4.7.4 多态案例二 - 制作饮品 ...
- 虚函数、纯虚函数、虚继承、多继承
来源:http://www.tnove.com/?p=57 C++的一个特征是多太,其中多态主要表现在 1.编译时多态 函数overload实现 2.运行是多态 虚函数override实现 其中虚 ...
最新文章
- 深度学习框架:GPU
- ef linq 中判断实体中是否包含某集合
- 大家猜猜看除了围棋,人工智能下一个颠覆的领域是什么?
- 全球首款碳纳米管通用计算芯片问世!RISC-V架构,5倍于摩尔定律,Nature连发三文推荐...
- ThreadLocal是什么?
- angularjs 让当前路由重新加载_Spring Cloud Gateway的动态路由怎样做?集成Nacos实现很简单...
- Math.abs为Integer.Min_VALUE返回错误的值
- 客户端与服务端的TCP通信实现(Qt)
- WordPress翻译更新失败解决方法
- GStreamer 编写一个简单的MP3播放器
- SQL去除数据库表中tab、空格、回车符等特殊字符的解决方法
- sendmessage()模拟鼠标点击
- educoder 初始mongodb
- JavaEE学习--javascript中的正则表达式
- 拓端tecdat|R语言进行相关矩阵分析及其网络可视化
- 如何打印复印试卷,试卷打印复印去哪里方便
- Android系统架构和应用程序基本概念详解
- 甘谷2021年高考成绩查询入口,筑梦百天,赢在高考|甘谷一中2021届高考百日誓师大会...
- 对象存储哪家价格便宜?最便宜的云存储推荐!
- 江苏统考计算机英语作文,2017年高考江苏卷英语作文
热门文章
- 系统属性的JDK 12 Javadoc标记
- how2java_HOW-TO:在Spring 4和Java 7中使用@PropertySource批注
- java微妙_编码Java时的10个微妙的最佳实践
- 尽早查看针对Java 11的功能
- 线程同步,线程不同步_重新同步多线程集成测试
- stackexchange_通过Spring Social推特StackExchange –第1部分
- Java中多线程的性能比较
- glassfish_具有GlassFish和一致性的高性能JPA –第1部分
- Spring注释,我从来没有机会使用第1部分:@primary
- 如何编写NetBeans插件