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

版权声明:本文博客原创文章,博客,未经同意,不得转载。

c/c++ 基金会(七) 功能覆盖,虚函数,纯虚函数控制相关推荐

  1. C++: 虚函数 / 纯虚函数

    虚函数 ● 虚函数是指在基类内部声明的成员函数前添加关键字 virtual 指明的函数 ● 虚函数存在的意义是为了实现多态,让派生类能够重写(override)其基类的成员函数 ● 派生类重写基类的虚 ...

  2. 面试中常被问到(11)虚函数/纯虚函数

    虚函数 如何定义一个虚函数?在基类成员函数前加入virtual关键字,但并不代表此函数不被实现,只是说明允许基类指针调用派生类重写的此函数 一个类只要声明有虚函数或者从基类继承了虚函数,在编译过程中就 ...

  3. 什么是纯虚函数 纯虚函数的作用 如何定义使用纯虚函数

    什么是纯虚函数 纯虚函数的作用 如何定义使用纯虚函数   一 定义: 纯虚函数是一种特殊的虚函数,它的一般格式如下:  class <类名>  {  virtual <类型>& ...

  4. C++多态虚函数/纯虚函数demo

    #include <iostream> using namespace std;class A //A是一个抽象类,不能new A直接实例化. { public:virtual void ...

  5. C++:多态与虚函数,纯虚函数

    1.多态的机制与虚函数的机制 1.1 多态的机制 1.当在类中使用virtual声明一个函数为虚函数时,在编译时,编译器会自动在基类中默默地安插一个虚函数表指针,同时的.rodata段为这类生成一张虚 ...

  6. 38.【C++ 虚函数 纯虚函数 虚基类 (最全详解)】

    虚函数.虚基类.纯虚函数 (一).虚函数 1.什么是虚函数: 2.虚函数的格式: 3.关于虚函数的注意事项: 4.虚函数的作用: 5.虚函数访问格式 6.虚函数的各种疑难杂症 [当指针是基类.但虚函数 ...

  7. 【C++ 语言】面向对象 ( 继承 | 重写 | 子类调用父类方法 | 静态多态 | 动态多态 | 虚函数 | 纯虚函数 )

    文章目录 类的继承 方法的重写 子类中调用父类方法 多态 虚函数 虚函数示例 纯虚函数 相关代码 类的继承 1. 继承表示 : C++ 中继承可以使用 ":" 符号 , 格式为 & ...

  8. C++ 虚函数 纯虚函数 抽象类 代码示例

    其中抽象类指的是在类的定义中出现了纯虚函数,导致无法实例化,. 代码:头文件 #include "stdafx.h"using namespace std;class Person ...

  9. 虚函数 纯虚函数 虚基类说明

    原文:http://www.cnblogs.com/ms-frank/archive/2008/01/16/1041310.html 虚基类 在说明其作用前先看一段代码 [cpp] view plai ...

最新文章

  1. SAP S/4 HANA新变化-主数据:物料主数据
  2. spring的发展||springboot和微服务的介绍
  3. 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-目录
  4. linux下weblogic版本,Linux下weblogic10.3.6(jar)版本安装详解
  5. dubbo-admin构建报错
  6. Tomcat解决HTTP GET中文乱码
  7. 从计算机体系结构方面思考深度学习
  8. VS2005(c#)项目调试问题解决方案集锦
  9. 惠普计算机笔记本打印机官网,HP2621打印机驱动
  10. oracle:oracle学习案例(五):基础练习
  11. java drawpolygon_Java如何绘制和填充有孔的Polygon
  12. ThinkPHP基础
  13. 58、LVS TUN模型实战
  14. gnuplot的常用技巧
  15. Python程序设计基础(第九章 字典和集合 练习记录)
  16. DRAM学习---1
  17. java函数参数使用冒号_java8中:: 用法示例(JDK8双冒号用法)
  18. 5.Numpy数组中数据的抽取
  19. win32库关于Photoshop
  20. 导数的几何意义和物理意义, 求曲线y=f(x) 在相应点处的切线方程,法线方程

热门文章

  1. Setting Expires and Cache-Control: max-age headers for static resources in ASP.NET
  2. 转载:Android开发相关的Blog推荐——跟随大神的脚步才能成长为大神
  3. TortoiseGit使用ssh-keygen生成的私钥
  4. 设计模式之不简单的工厂模式(二)
  5. python 发送邮件附件很慢_Python SMTP 发送带附件电子邮件
  6. phphstudy运行不了网站_网站SEO优化之如何维护网站权重?
  7. kotlin中mainactivity无法直接调用xml中的控件_使用Kotlin高效地开发Android App(一)
  8. 计算机的精度论文,计算机辅助机械零件精度设计毕业论文
  9. SSM错误:Exception in thread “main“ java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletReque
  10. php通过js发送请求数据,使用原生javascript发送ajax请求数据的步骤