c/c++中的函数覆盖,虚函数,纯虚函数对比是什么样的
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,c/c++中的函数覆盖,虚函数,纯虚函数对比是什么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.函数覆盖ClassA , C
千家信息网最后更新 2025年11月09日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#include using 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#include using 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"#include using 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安全错误
数据库的锁怎样保障安全
杭州古灵精网络技术有限公司
网络安全手抄报不用写字版
南京市网络安全审计
数据库新技术与应用
河南中关村互联网科技集团
浅水湾租房软件开发
华为网络安全使用
网络安全教育工作如何
初中议论作文网络安全
红包雨软件开发
软件开发培训学校金线莲种植
金蝶软件显示服务器
朝阳区正规软件开发多少钱
中专网络安全专业要学编程嘛
2017服务器管理技术
想租一个服务器来模拟
泉州国光软件开发
服务器什么时候需要维护
唐山php软件开发
网络技术咨询价格对比
广东尚睿网络技术怎么样
人人商城数据库结构
云数据库运用技术
服务器linux系统备份
数据库各表之间的联系
通信行业网络安全管理
初中议论作文网络安全
网络安全挑战灵丹妙药
江苏营销网络技术哪家好
软件开发是不是都是男的