c/c++中的函数覆盖,虚函数,纯虚函数对比是什么样的
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,c/c++中的函数覆盖,虚函数,纯虚函数对比是什么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.函数覆盖ClassA , C
千家信息网最后更新 2025年01月19日c/c++中的函数覆盖,虚函数,纯虚函数对比是什么样的
c/c++中的函数覆盖,虚函数,纯虚函数对比是什么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
1.函数覆盖
ClassA , ClassB ,其中ClassB继承ClassA
类定义如下:
#ifndef _CLASSA_H#define _CLASSA_H#includeusing namespace std;class ClassA{ public: ClassA(void); ~ClassA(void); void method();};#endif
#include "stdafx.h"#include "ClassA.h"ClassA::ClassA(void){}ClassA::~ClassA(void){}void ClassA::method(void){ cout<<"I am from class ClassA: methodA"< #ifndef _CLASS_B#define _CLASS_B#include "ClassA.h"class ClassB:public ClassA{public: ClassB(void); ~ClassB(void); void method();};#endif#include "stdafx.h"#include "ClassB.h"ClassB::ClassB(void){}ClassB::~ClassB(void){}void ClassB::method(){ cout<<"I am from class ClassB: methodA"<2.虚函数覆盖
VirtualClassA , VirtualClassB ,其中VirtualClassB继承VirtualClassA
类定义如下:
#ifndef _VIRTUAL_CLASS_A#define _VIRTUAL_CLASS_A#includeusing namespace std;class VirtualClassA{public: VirtualClassA(void); ~VirtualClassA(void); virtual void method();};#endif #include "stdafx.h"#include "VirtualClassA.h"VirtualClassA::VirtualClassA(void){}VirtualClassA::~VirtualClassA(void){}void VirtualClassA::method(){ cout<<"I am from class VirtualClassA: method"< #ifndef _VIRTUAL_CLASS_B#define _VIRTUAL_CLASS_B#include "VirtualClassA.h"class VirtualClassB:public VirtualClassA{public: VirtualClassB(void); ~VirtualClassB(void); virtual void method( );};#endif#include "stdafx.h"#include "VirtualClassB.h"VirtualClassB::VirtualClassB(void){}VirtualClassB::~VirtualClassB(void){}void VirtualClassB::method(){ cout<<"I am from class VirtualClassB: method"<3.纯虚函数覆盖
PureVirtualClassA , PureVirtualClassB ,其中PureVirtualClassB继承PureVirtualClassA
类定义如下:
#ifndef _PURE_VIRTUAL_CLASS_A#define _PURE_VIRTUAL_CLASS_A#includeusing namespace std;class PureVirtualClassA{public: PureVirtualClassA(void); ~PureVirtualClassA(void); virtual void method() =0; /* 通常,不实现抽象基类的纯虚函数; 当然,也可以给纯虚函数提供实现; */};#endif #include "stdafx.h"#include "PureVirtualClassA.h"PureVirtualClassA::PureVirtualClassA(void){}PureVirtualClassA::~PureVirtualClassA(void){}#ifndef _PURE_VIRTUAL_CLASS_B#define _PURE_VIRTUAL_CLASS_B#include "purevirtualclassa.h"class PureVirtualClassB :public PureVirtualClassA{public: PureVirtualClassB(void); ~PureVirtualClassB(void); virtual void method();};#endif#include "stdafx.h"#include "PureVirtualClassB.h"PureVirtualClassB::PureVirtualClassB(void){}PureVirtualClassB::~PureVirtualClassB(void){}void PureVirtualClassB::method(void){ cout<<"I am from class PureVirtualClassB: method"<测试代码如下:
// virtualMethodTest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "ClassA.h"#include "ClassB.h"#include "VirtualClassA.h"#include "VirtualClassB.h"#include "PureVirtualClassA.h"#include "PureVirtualClassB.h"#includeusing namespace std;int _tmain(int argc, _TCHAR* argv[]){ cout<<"--------覆盖---------"< method(); delete(pClassA); ClassB *pClassB=new ClassB(); pClassB->method(); // pClassB->ClassA::method();--可以隐式调用父类的方法 // (*pClassB).ClassA::method(); delete(pClassB); ClassA *pClassB2=new ClassB(); pClassB2->method(); delete(pClassB2); cout<<"-------多态----------"< method(); delete(pVirtualClassA); VirtualClassB *pVirtualClassB=new VirtualClassB(); pVirtualClassB->method(); delete(pVirtualClassB); VirtualClassA *pVirtualClassB2=new VirtualClassB(); pVirtualClassB2->method(); delete(pVirtualClassB2); cout<<"-------纯虚函数----------"< method(); //delete(pPureVirtualClassA); PureVirtualClassB *pPureVirtualClassB=new PureVirtualClassB(); pPureVirtualClassB->method(); delete(pPureVirtualClassB); PureVirtualClassA *pPureVirtualClassB2=new PureVirtualClassB(); pPureVirtualClassB2->method(); delete(pPureVirtualClassB2); return 0;} 打印结果如下:
函数覆盖不能实现多态;
虚函数和纯虚函数可以实现多态;
含有纯虚函数的类不能实例化。
关于c/c++中的函数覆盖,虚函数,纯虚函数对比是什么样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
函数
多态
问题
方法
更多
帮助
解答
易行
简单易行
代码
入口
内容
实例
小伙
小伙伴
应用程序
控制台
知识
程序
篇文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
dota2设置更新服务器
软件开发考试基础知识
数据库摘分区的原因
人民银行金融信用数据库客服
python 搭建服务器
深圳搜搜搜网络技术
简易数据库查询软件
下雪视频软件开发
谁在保护我们网络安全
云免费的服务器领取
如何查看服务器品牌
c语言显示数据库数据类型
修复网络dns服务器未响应
文化贸易的数据用什么数据库
远程服务器登录不上
如何把pdf放到服务器
数据库怎么查询字段相同
麻将服务器破解
凯易讯网络技术有限公司
常用的软件开发工具有哪些
用pd画数据库模型图
诊疗中心数据库管理规范
数据库技术甲骨文落后了吗
沈阳互联网科技学校
数据库技术在哪些方面
如何查看服务器品牌
合发网络技术青岛即墨分公司
天睿网络技术有限公司
服务器软件李鑫
以色列网络安全排名