c/c++ 基础(七) 函数覆盖,虚函数,纯虚函数对比
来源:互联网 发布:dns解析域名到端口号 编辑:程序博客网 时间:2024/05/17 08:44
1.函数覆盖
ClassA , ClassB ,其中ClassB继承ClassA
类定义如下:
#ifndef _CLASSA_H#define _CLASSA_H#include <iostream>using 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"<<endl;}
#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"<<endl;}
2.虚函数覆盖
VirtualClassA , VirtualClassB ,其中VirtualClassB继承VirtualClassA
类定义如下:
#ifndef _VIRTUAL_CLASS_A#define _VIRTUAL_CLASS_A#include <iostream>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"<<endl;}
#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"<<endl;}
3.纯虚函数覆盖
PureVirtualClassA , PureVirtualClassB ,其中PureVirtualClassB继承PureVirtualClassA
类定义如下:
#ifndef _PURE_VIRTUAL_CLASS_A#define _PURE_VIRTUAL_CLASS_A#include <iostream>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"<<endl;}
测试代码如下:
// virtualMethodTest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "ClassA.h"#include "ClassB.h"#include "VirtualClassA.h"#include "VirtualClassB.h"#include "PureVirtualClassA.h"#include "PureVirtualClassB.h"#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){cout<<"--------覆盖---------"<<endl;ClassA *pClassA=new ClassA();pClassA->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<<"-------多态----------"<<endl;VirtualClassA *pVirtualClassA=new VirtualClassA();pVirtualClassA->method();delete(pVirtualClassA);VirtualClassB *pVirtualClassB=new VirtualClassB();pVirtualClassB->method();delete(pVirtualClassB);VirtualClassA *pVirtualClassB2=new VirtualClassB();pVirtualClassB2->method();delete(pVirtualClassB2);cout<<"-------纯虚函数----------"<<endl;//PureVirtualClassA *pPureVirtualClassA=new PureVirtualClassA();//pPureVirtualClassA->method();//delete(pPureVirtualClassA);PureVirtualClassB *pPureVirtualClassB=new PureVirtualClassB();pPureVirtualClassB->method();delete(pPureVirtualClassB);PureVirtualClassA *pPureVirtualClassB2=new PureVirtualClassB();pPureVirtualClassB2->method();delete(pPureVirtualClassB2);return 0;}
打印结果如下:
函数覆盖不能实现多态;
虚函数和纯虚函数可以实现多态;
含有纯虚函数的类不能实例化。
代码地址:http://download.csdn.net/detail/zz7zz7zz/8096231
0 0
- c/c++ 基础(七) 函数覆盖,虚函数,纯虚函数对比
- 【C/C++】纯虚函数
- [C++]虚函数与纯虚函数
- C++: 浅谈虚函数、纯虚函数
- C++::关于虚函数,纯虚函数
- [C++]虚函数和纯虚函数
- c++-虚函数与纯虚函数
- 【C++】普通函数、虚函数和纯虚函数
- C/C++ 函数指针、虚函数、纯虚函数
- c++(一) 类 对象 重载 继承 多态 构造函数 虚函数 覆盖 纯虚函数等
- c/c++----------虚函数、虚继承、纯虚函数
- C方式实现C++纯虚函数
- 【c++】纯虚函数和抽象类
- C++:纯虚函数与抽象类
- 【C++】纯虚函数的简单应用。
- [C++]纯虚函数和抽象类
- 纯C环境下实现标准函数的覆盖
- C++——虚函数与纯虚函数
- ORACLE同一次查询取同一字段的前(后)N条记录
- Python 列表(list)操作
- 虚拟化技术学习(一)在VMware虚拟机中安装KVM
- R语言时间序列函数整理
- JSON入门小例子
- c/c++ 基础(七) 函数覆盖,虚函数,纯虚函数对比
- uploadify上传文件Firefox浏览器上传失败解决方法
- repo的用法
- HTML知识累积
- javascript获取url参数以及改变url参数值
- 关于NRV优化
- xshell个人使用小结
- easyui 1.4 datagrid 请求两次的原因
- 深入Python(1): 字典排序 关于sort()、reversed()、sorted()