当前位置: 首页 > news >正文

关于建设网站的图片微信公众号模板去哪找

关于建设网站的图片,微信公众号模板去哪找,织梦dede做网站的优点,wordpress 4.4.1下载前言 本文将介绍 C 继承体系下,函数缺省参数的绑定和函数访问说明符的绑定。这些奇怪的问题实际上不应在我们的代码中出现,但它们能帮助我们理解 C 的动态绑定和静态绑定,也能帮助我们更好的通过面试。 缺省参数值 先来看一段代码&#xf…

前言

本文将介绍 C++ 继承体系下,函数缺省参数的绑定和函数访问说明符的绑定。这些奇怪的问题实际上不应在我们的代码中出现,但它们能帮助我们理解 C++ 的动态绑定和静态绑定,也能帮助我们更好的通过面试。

缺省参数值

先来看一段代码:

class A {
public:virtual void fun(char ch = 'A') {cout << ch << endl;}
};class B : public A {
public:virtual void fun(char ch = 'B') {cout << ch << ch << endl;}
};int main() {A* pa = new B;pa->fun();return 0;
}

上述代码的运行结果是什么?是 A 还是 BB 呢?

很遗憾,都不是,代码的运行结果是 AA。

解释

发生这种现象的原因是:virtual 函数是动态绑定,而缺省参数是静态绑定。静态绑定又名前期绑定,在编译时确定;动态绑定又名后期绑定,在运行时确定。

cppreference 对这行为的解释:虚函数的覆盖函数不会从基类定义获得默认实参,而在进行虚函数调用时,默认实参根据对象的静态类型确定。

静态类型与动态类型:

A* pa = new B;	// 静态类型是 A*,动态类型是 B*
B* pb = new B;	// 静态类型是 B*,动态类型是 B*

对象的静态类型就是我们在代码中所写的类型,而动态类型则是指「目前所指对象的类型」。

这样也就能解释上述代码了,因为 a 的静态类型是 A*,在编译时,参数的缺省值绑定的是 ‘A’。而虚函数是动态绑定,取决于动态类型,绑定的是 B 类中重写后的函数实现。

为什么 C++ 采用了如此奇怪的方式运行?

答案在于运行期效率。如果缺省参数是动态绑定,编译器就必须有某种方法在运行期为 virtual 函数决定适当的参数缺省值。这比目前实行的「在编译期决定」的机制更慢而且更复杂。

访问说明符

下面来看一段更加奇怪的代码:

class A {
public:virtual void fun() {cout << "A" << endl;}
};class B : public A {
private:virtual void fun() {cout << "B" << endl;}
};int main() {A* pa = new B;pa->fun();B b;b.fun();return 0;
}

上述代码的运行结果是什么?

a->fun() 正确,并打印出 B;b.fun() 报编译错误,无法访问 private 成员。

解释

发生这种现象与访问说明符作用时间有关。

cppreference 对访问说明符的说明:

每个类成员(静态、非静态、函数、类型等)的名字都具有与其关联的「成员访问」。在程序的任何位置使用成员的名字时都会检查其访问,而且如果它不满足访问规则,那么程序不能编译。成员访问检查是对任何给定语言构造进行解释之后的最后一步。此规则的目的是使得以 public 替换任何 private 时始终不会改变程序的行为。

对虚函数的名字的访问规则,在调用点使用(用于代表调用该成员函数的对象的)表达式的类型进行检查,忽略最终覆盖函数的访问。

从上述表述,可以得出两点:

  1. 访问说明符只在编译时有效,当代码加载到内存后,没有任何访问说明符上的区别
  2. 虚函数的访问说明符,由调用该虚函数的对象的静态类型决定

这也就能解释上述代码了:

pa 的静态类型为 A*,A::fun() 是 public 的,可以调用。b 的静态类型是 B,B::fun() 是 private 的,不能调用。

http://www.yayakq.cn/news/945214/

相关文章:

  • 简单网站制作教程如何搭建网站
  • 网络建站网网络推广wordpress建企业网站
  • 鹰潭房产网站建设沈阳网站制作网页
  • 广西建设局网站首页成都住房和城乡建设局网站首页
  • 提供手机网站制作dedecms织梦和wordpress
  • 网络公司网站官网高新园区规划建设局网站
  • 做封面图的网站尚普咨询市场调研公司
  • 旅游商城网站订单处理wordpress侧边栏关闭
  • html网站开发代码找项目创业网
  • 哪个网站系统做的好智慧团建pc端登录
  • 阿里云网站建设方案书互联网营销方式有哪些
  • 网站建设要些什么seo有哪些作用
  • 网站制作公司知道万维科技免费设计logo在线生成
  • 一个虚拟主机如何建多个网站代码wordpress采集1024
  • 企业推广建站浏览广告赚钱一天100元
  • 网站模板 免费wordpress 团购 主题
  • 专业开发手机网站建设中国房地产新闻
  • 彩页设计网站域名到期对网站影响
  • 太原响应式网站建设手机版文章网站源码
  • 建设银行招标网站wordpress改wp admin
  • 本地做网站贵台州网站开发公司
  • 做网站需要多少钱 都包括什么重庆在线课程平台
  • 襄阳做网站找哪家公司广州地区做网站的
  • 怎么用php源代码做网站wordpress模板 物流
  • 北京网站建设模板主题企业网站策划怎么样
  • 建站是什么意思怎么做代理人金沙网站
  • 正规网站开发流程wordpress主题域名授权破解
  • 龙华企业网站建设WordPress哪些主题是免费的
  • 网站运行与维护中国化学工程第九建设公司网站
  • 广州哪家做网站wordpress 247