首页 / 知识
关于功能:C ++重载决议
2023-04-15 21:55:00

C++ overload resolution本问题已经有最佳答案,请猛点这里访问。
鉴于以下示例,为什么我必须显式使用语句 编译器的重载决议不应该弄清楚我在谈论哪种方法? 我正在使用Microsoft VS 2005.(注意:在这种情况下使用虚拟无效。)
两个"重载"不在同一范围内。默认情况下,编译器仅在找到名称匹配项之前才考虑可能的最小名称范围。之后进行参数匹配。在您的情况下,这意味着编译器看到
一种解决方案是将重载从
重载分辨率是C ++中最丑陋的部分之一 基本上,编译器在B的范围内找到名称匹配"DoSomething(int)",看到参数不匹配,并且因错误而停止。 可以通过使用B类中的A :: DoSomething来克服它
派生类中方法的存在会隐藏基类中具有相同名称(无论参数)的所有方法。这样做是为了避免这样的问题:
比以后有人改变了A类:
现在突然:
换句话说,如果它不能像这样工作,那么你不能控制的类(A)中的无关变化可能会默默地影响代码的工作方式。 不,这种行为是存在的,以确保您不会被错误地从远程基类继承。 要绕过它,您需要通过在B类中放置一个使用A :: DoSomething来告诉编译器您要调用哪个方法。 有关此行为的快速简单概述,请参阅此文章。 这与名称解析的工作方式有关。基本上,我们首先找到名称来自的范围,然后我们收集该范围内该名称的所有重载。但是,您的案例范围是B类,而在B类中,B :: DoSomething隐藏A :: DOSomething: 3.3.7名称隐藏[basic.scope.hiding] ... [剪断] ...
3在成员函数定义中,隐藏本地名称的声明 由于名称隐藏,A :: DoSomething甚至不考虑重载解析 那不是超载!那是在隐藏! 在派生类中定义函数时,它会在基类中隐藏具有该名称的所有函数。如果基类函数是虚函数并且具有兼容签名,则派生类函数也会覆盖基类函数。但是,这不会影响可见性。 您可以使用using声明使基类函数可见:
该函数由子类中具有相同名称的函数隐藏(但具有不同的签名)。您可以使用using语句取消隐藏它,就像使用A :: DoSomething(); 在向继承树中搜索要使用的函数时,C ++使用不带参数的名称,一旦找到它停止的任何定义,然后检查参数。在给出的示例中,它在B类中停止。为了能够完成您的工作,B类应该像这样定义:
|
最新内容
相关内容
写5条linux命令语句?
写5条linux命令语句?,工作,地址,系统,信息,目录,命令,管理,标准,功能,文件,linux常用的命令有哪些1、linux系统常用操作命令如下:ls:全拼list,功linux命令语句规律?
linux命令语句规律?,系统,管理,基础,网络,信息,命令,服务,简介,工具,标准,linux必学的命令是什么?1、Linux常用的命令可以分为以下几类:安装和linux使用命令的方法?
linux使用命令的方法?,系统,信息,工具,标准,数据,命令,左下角,目录,文件夹,图标,linux的cd命令的使用方法1、cd ~:回到用户家目录。注:这得看你linux循环语句命令?
linux循环语句命令?,地方,增长,数字,语句,流程,名称,工具,代码,数据,条件,Linux入门系列——awk命令详解1、其中command是真正的awk命令,-F表示linux进入编译器命令?
linux进入编译器命令?,系统,代码,环境,网上,基础,工作,工具,信息,时间,地址,linux终端下如何进行C语言编译1、在Linux下面,如果要编译一个C语言linux命令输入方法?
linux命令输入方法?,系统,电脑,密码,管理,地址,命令,网站,工具,首开,位置,linux终端输入~怎么弄中间在电脑上打开需要的Word文件进入。进入到文嵌入式linux命令语句?
嵌入式linux命令语句?,系统,环境,基础,网络,软件,基础知识,服务,设备,管理,嵌入式,嵌入式linux系统开发详解_嵌入式linux系统介绍嵌入式LinuxPython中什么是反射?使用方法有哪
Python中什么是反射?使用方法有哪些?,信息,培训,状态,术语,检测,反射,属性,对象,字符串,方法,反射这个术语在很多语言中都存在,并且存在大量的Python中有哪些方法可以解压文件?
Python中有哪些方法可以解压文件?,工具,系统,工作,培训,文件,文件夹,方法,窗体,不同于,以下内容,在Python学习和日常使用中,很容易造成文件过大Python列表类型list合并有哪些方法
Python列表类型list合并有哪些方法?,培训,方法,列表,可能会,数组,切片,下文,字符串,数据类型,请看,在Python编程语言中,有各种数据类型,比如字符零基础学习Python的四种方法
零基础学习Python的四种方法,基础,代码,基础知识,培训,发展,时间,知识,书籍,初学者,练习,近年来,随着移动互联网的发展,对Python人才的需求越来Python 炫技操作:条件语句的七种写
Python 炫技操作:条件语句的七种写法,代码,培训,工程,公共,写法,语法,例子,发烧友,操作,语句,有的人说Python入门容易,但是精通难的语言,这点我