静态调用,与动态调用。

动态调用条件:必须用父类的引用或者指针,并且调用的必须是虚方法。

#include <iostream>

class Base{
public:
virtual int fcn(){
std::cout << "base fcn()" << std::endl;
}
}; class D1 : public Base{ public:
using Base::fcn;
int fcn(int){//形参与Base的fcn不一致,所以隐藏了Base的fcn
std::cout << "D1 fcn(int)" << std::endl;
}
virtual void f2(){
std::cout << "D1 f2()" << std::endl;
}
}; class D2 : public D1{
public:
int fcn(int){//隐藏了D1::fcn(int)
std::cout << "D2 fcn(int)" << std::endl;
}
int fcn(){//覆盖了Base的虚函数fcn
std::cout << "D2 fcn()" << std::endl;
}
void f2(){//覆盖了D1的虚函数f2
std::cout << "D2 f2()" << std::endl;
}
}; int main(){
Base b;
D1 d1;
D2 d2; d1.fcn(); Base* bp1 = &b;
Base* bp2 = &d1;
Base* bp3 = &d2; bp1->fcn();//调用虚函数,将在运行时调用Base::fcn
bp2->fcn();//调用虚函数,将在运行时调用Base::fcn
bp3->fcn();//调用虚函数,将在运行时调用D2::fcn D1* d1p = &d1;
D1* d2p = &d2; //bp2->f2();//‘class Base’ has no member named ‘f2’
d1p->f2();//调用虚函数,将在运行时调用D1::f2
d2p->f2();//调用虚函数,将在运行时调用D2::f2 Base* p1 = &d2;
D1* p2 = &d2;
D2* p3 = &d2;
//p1->fcn(12);//error
p2->fcn(12);//静态调用,调用D1::fcn(int)
p3->fcn(12);//静态调用,调用D2::fcn(int) }

运行结果:

base fcn()
base fcn()
base fcn()
D2 fcn()
D1 f2()
D2 f2()
D1 fcn(int)
D2 fcn(int)

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

c/c++ 继承与多态 静态调用与动态调用的更多相关文章

  1. 【VB技巧】VB静态调用与动态调用dll详解

    本文“[VB技巧]VB静态调用与动态调用dll详解”,来自:Nuclear'Atk 网络安全研究中心,本文地址:http://lcx.cc/?i=489,转载请注明作者及出处! [[请注意]]:在以下 ...

  2. C++调用DLL有两种方法——静态调用和动态调用

    C++调用DLL有两种方法——静态调用和动态调用 标签: dllc++winapinullc 2011-09-09 09:49 11609人阅读 评论(0) 收藏 举报  分类: cpp(30)  [ ...

  3. dll静态调用和动态调用

    动态链接库有2种连接方式,一种是通过库直接加入(又叫隐式加载或载入时加载),一种是在运行时加入.后者很好理解,比如LoadLibrary(),GetProcAddress()获取想要引入的函数,使用完 ...

  4. java方法调用之动态调用多态(重写override)的实现原理——方法表(三)

    上两篇篇博文讨论了java的重载(overload)与重写(override).静态分派与动态分派.这篇博文讨论下动态分派的实现方法,即多态override的实现原理. java方法调用之重载.重写的 ...

  5. DLL的静态调用和动态调用

    // ------------------------------------DLL源代码 circle.dproj -------------------------------------libr ...

  6. C# 调用WebService的3种方式 :直接调用、根据wsdl生成webservice的.cs文件及生成dll调用、动态调用

    1.直接调用 已知webservice路径,则可以直接 添加服务引用--高级--添加web引用 直接输入webservice URL.这个比较常见也很简单 即有完整的webservice文件目录如下图 ...

  7. Android与JNI(二) ---- Java调用C++ 动态调用

    目录: 1. 简介 2. JNI 组件的入口函数 3. 使用 registerNativeMethods 方法 4. 测试 5. JNI 帮助方法 6. 参考资料 1. 简介 Android与JNI( ...

  8. python基础——继承和多态

    python基础——继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类 ...

  9. python学习日记(继承和多态)

    继承 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.S ...

随机推荐

  1. java反射取private字段

    Class clazz = bean.getClass();Field[] fields = clazz.getDeclaredFields();String sign = ""; ...

  2. IDEA激活码(2019)

    如您激活出现问题,请点击这里加入:软件激活问题解决群 前言 IDEA已然成为我最热爱的一款编辑器,作为一个从Eclipse阵营转过来的coder,确实能感受到IDEA的强大,而我电脑桌面的Eclips ...

  3. python判断两个文件是否相同

    此方法相当于 Linux 系统下的diff,或者是 git 下的 checkout 官方解释请看: https://docs.python.org/2/library/difflib.html #!/ ...

  4. ASP.NET 下载文件方式

    protected void Button1_Click(object sender, EventArgs e) { /* 微软为Response对象提供了一个新的方法TransmitFile来解决使 ...

  5. 消息队列、socket(UDP)实现简易聊天系统

    前言: 最近在学进程间通信,所以做了一个小项目练习一下.主要用消息队列和socket(UDP)实现这个系统,并数据库存储数据,对C语言操作数据库不熟悉的可以参照我的这篇博客:https://www.c ...

  6. 基于IdentityServer4 实现.NET Core的认证授权

    IdentityServer4是什么? IdentityServer4是基于ASP.NET Core实现的认证和授权框架,是对OpenID Connect和OAuth 2.0协议的实现. OpenID ...

  7. SmartSql 性能评测

    BenchmarkDotNet=v0.10.14, OS=Windows 10.0.17134 Intel Core i7-6700K CPU 4.00GHz (Skylake), 1 CPU, 8 ...

  8. [Css] css3的flex布局

    flex思维导图 {"name":"flex","children":[{"name":"传统布局方式&quo ...

  9. C#工具:Bootstrap WPF Style,Bootstrap风格的WPF样式

    简介 GitHub地址:https://github.com/ptddqr/bootstrap-wpf-style 此样式基于bootstrap-3.3.0,样式文件里的源码行数都是指的这个版本.CS ...

  10. Android Material Design控件使用(三)——CardView 卡片布局和SnackBar使用

    cardview 预览图 常用属性 属性名 说明 cardBackgroundColor 设置背景颜色 cardCornerRadius 设置圆角大小 cardElevation 设置z轴的阴影 ca ...