C中没有像MRO那样的MRO.如果一个方法是模糊的,那么这是一个编译时错误.一个方法是否是虚拟的不影响它,但虚拟继承会.

该算法在C标准§[class.member.lookup](10.2)中描述.基本上它将在超类图中找到最接近的明确的实现.该算法的工作原理如下:

假设你想在C类中查找一个函数f.

>我们定义一个查找集合S(f,C),它是一组表示所有可能性的集合(Δ,Σ). (§10.2/ 3)

>集合Δ称为声明集,这基本上都是可能的f.

>集合Σ被称为子对象集,它包含找到这些f的类.

>让S(f,C)包括C中直接定义(或使用ed)的所有f(如果有的话)(§10.2/ 4):

Δ = {f in C};

if (Δ != empty)

Σ = {C};

else

Σ = empty;

S(f, C) = (Δ, Σ);

>如果S(f,C)为空(§10.2/ 5),

>计算S(f,Bi)其中Bi是C的基类,对于所有i.

将每个S(f,Bi)逐个合并成S(f,C).

if (S(f, C) == (empty, empty)) {

B = base classes of C;

for (Bi in B)

S(f, C) = S(f, C) .Merge. S(f, Bi);

}

>最后,声明集作为名称解析的结果返回(§10.2/ 7).

return S(f, C).Δ;

>两个查找集合(Δ1,Σ1)和(Δ2,Σ2)之间的合并定义为(§10.2/ 6):

>如果Σ1中的每个类都是Σ2中至少一个类的基类,则返回(Δ2,Σ2).

(反之亦然)

>否则如果Δ1≠Δ2,则返回(模糊,Σ1∪Σ2).

>否则返回(Δ1,Σ1∪Σ2)

function Merge ( (Δ1, Σ1), (Δ2, Σ2) ) {

function IsBaseOf(Σp, Σq) {

for (B1 in Σp) {

if (not any(B1 is base of C for (C in Σq)))

return false;

}

return true;

}

if (Σ1 .IsBaseOf. Σ2) return (Δ2, Σ2);

else if (Σ2 .IsBaseOf. Σ1) return (Δ1, Σ1);

else {

Σ = Σ1 union Σ2;

if (Δ1 != Δ2)

Δ = ambiguous;

else

Δ = Δ1;

return (Δ, Σ);

}

}

例如(§10.2/ 10),

struct V { int f(); };

struct W { int g(); };

struct B : W, virtual V { int f(); int g(); };

struct C : W, virtual V { };

struct D : B, C {

void glorp () {

f();

g();

}

};

我们计算

S(f, D) = S(f, B from D) .Merge. S(f, C from D)

= ({B::f}, {B from D}) .Merge. S(f, W from C from D) .Merge. S(f, V)

= ({B::f}, {B from D}) .Merge. empty .Merge. ({V::f}, {V})

= ({B::f}, {B from D}) // fine, V is a base class of B.

S(g, D) = S(g, B from D) .Merge. S(g, C from D)

= ({B::g}, {B from D}) .Merge. S(g, W from C from D) .Merge. S(g, V)

= ({B::g}, {B from D}) .Merge. ({W::g}, {W from C from D}) .Merge. empty

= (ambiguous, {B from D, W from C from D}) // the W from C is unrelated to B.

c语言中d1的分辨率是,C中的方法分辨率顺序相关推荐

  1. python语言中print函数的作用_python中print()方法有什么

    python中print()方法有什么 发布时间:2020-11-11 13:50:08 来源:亿速云 阅读:91 作者:小新 这篇文章给大家分享的是有关python中print()方法有什么的内容. ...

  2. 转载——C语言中float,double类型,在内存中的结构(存储方式)

    最近在做一个数据格式分析和转换的项目,第一次接触底层的二进制代码存储,看的一头雾水,看到这个帖子后对于在Windows系统下数据的存储方式有了更多的了解,将原文分享一下: 原文地址为http://ww ...

  3. 在c语言中char型数据在内存中的储存形式为什么

    在c语言中char型数据在内存中的储存形式为"ASCII码".在C语言中,将一个字符常量放到一个字符变量中,实际并不是把该字符本身放到内存单元中,而是将与该字符相对应的ASCII码 ...

  4. 在c语言中 char型数据在内存中的存储形式是,在c语言中char型数据在内存中的存储形式是什么?...

    在c语言中char型数据在内存中的存储形式是ASCII码.在C语言中,char型数据是将一个字符常量放到一个字符变量中,并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单 ...

  5. c语言计算存储大小,在C语言中5种基本数据类型的存储空间长度的排列顺序

    在C语言中5种基本数据类型的存储空间长度的排列顺序 來源:互聯網  2010-04-22 19:19:59  評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 問題 ...

  6. 素数在c语言表达能力,巧用C语言中的Continue语句解决数论中的问题

    .#0 福建电脑!""#年第$%期 巧用!语言中的!"#$%&'(语句解决数论中的问题 杨爱梅 !河南工业大学河南郑州"#$$#%& !摘要!运 ...

  7. c语言中的if语句_If ... C中的其他语句解释

    c语言中的if语句 Conditional code flow is the ability to change the way a piece of code behaves based on ce ...

  8. c语言中point的用法_C/C++中 *和amp;的爱恨情仇

    C++中&和*的用法一直是非常让人头疼的难点,课本博客上讲这些的知识点一般都是分开讲其用法的,没有详细的总结,导致我在这方面的知识结构格外混乱,在网上找到了一篇英文文章简单总结了这两个符号的一 ...

  9. r语言中的while循环_R编程中的While循环

    r语言中的while循环 In addition to the for loop we discussed earlier, R also offers another kind of loop to ...

  10. 编程c语言中,向上取整函数_C编程中的函数

    编程c语言中,向上取整函数 什么是功能? (What is a Function?) A Function is a block of statements that performs a speci ...

最新文章

  1. prop和attr在 jquery的
  2. 杭电1259ZJUTACM
  3. 【QT】QT从零入门教程(五):图像文件操作 [新建打开保存]
  4. 并联串联混合的电压和电流_如何从本质上判断电压表测量谁的电压?
  5. 如何正确的卸载MATLAB7?
  6. 冒泡排序(C语言代码介绍)
  7. 大学生创新创业 /互联网+ 大赛 商业计划书目录(模板)
  8. 1.深入浅出:理解三极管截止、放大和饱和状态!——参考《模拟电子技术基础》清华大学华成英主讲
  9. 【python】Anaconda3环境安装
  10. Mac系统如何制作Mac U盘启动盘(更新至mac 12.6)
  11. 上海市计算机三级 是什么水平,上海计算机等级考试跟全国计算机等级考试有什么区别吗?...
  12. 谷歌浏览器崩溃之错误代码:RESULT_CODE_MISSING_DATA
  13. 计算机网络实验:路由器交换机与其基本配置操作、常见命令
  14. JAVA中RandomAccess接口
  15. 腾讯 2022 校招大厂薪资首发,白菜总包接近 40w!
  16. CreateEvent和SetEvent函数
  17. 基于51单片机的自动窗帘控制系统
  18. java.net.UnknownHostException 异常处理(个人案例)
  19. 蓝桥杯题目练习(旅行家的预算)
  20. C语言 有a个学生,每个学生有b门课程的成绩。输入学生的序号后输出对应的全部成绩

热门文章

  1. Android 序列帧动画
  2. Python UI自动化报错汇总2
  3. PS中预设画笔并为路径描边
  4. python万能头文件_c++的‘万能头文件’真的万能吗?
  5. Spring data JPA图文教程(一)
  6. java软件开发毕业论文_基于java软件毕业论文.doc
  7. mysql dbutil_DBUtil详解
  8. 禅道下载与安装教程(完整版)
  9. Windows下telnet工具使用
  10. onenote导入html文件,OneNote加入:获取HTML内容