⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 virtualinheritance.html

📁 关于 C++ 的历史无须我来介绍了
💻 HTML
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>



  
  
  <link rel="stylesheet" href="css/stdlayout.css" type="text/css">



  
  
  <link rel="stylesheet" href="css/print.css" type="text/css">



  
  
  <meta content="text/html; charset=gb2312" http-equiv="content-type">


  
  
  <title>虚拟继承(Virtual Inheritance)</title>
</head>


<body>



<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>



<h1><a href="CppGossip.html">C++
Gossip:&nbsp;虚拟继承(Virtual Inheritance)</a></h1>



多重继承时,会有一种模拟两可的情况,就是当两个类别都继承同一个基底类别,而这两个类别又同时被另一个类别,以平行多重继承的方式同时继承,例如下面的
示意图: <br>



<img style="width: 320px; height: 222px;" alt="多重继承问题" src="images/virtualInheritance-1.jpg"><br>



<br>



&nbsp;<br>



在上图中,C类别将会拥有两个A类别的复本,一个来自B1所继承下来的,一个来自B2所继承下来的,那么C类别到底要用B1所继承下来的?还是B2所继承
下来的?您可以使用“虚拟继承”(Virtual Inheritance)来解决这个问题。 <br>



<br>



虚拟继承是在继承基底类别时使用"virtual"关键字,例如: <br>



<div style="margin-left: 40px; font-family: Courier New,Courier,monospace;"><span style="font-weight: bold;">class A { </span><br style="font-weight: bold;">


<span style="font-weight: bold;">&nbsp;&nbsp;&nbsp; // 实作 </span><br style="font-weight: bold;">


<span style="font-weight: bold;">}; </span><br style="font-weight: bold;">


<br style="font-weight: bold;">


<span style="font-weight: bold;">class B1 : virtual public A {&nbsp; // 虚拟继承 </span><br style="font-weight: bold;">


<span style="font-weight: bold;">&nbsp;&nbsp;&nbsp; // 实作 </span><br style="font-weight: bold;">


<span style="font-weight: bold;">}; </span><br style="font-weight: bold;">


<br style="font-weight: bold;">


<span style="font-weight: bold;">class B2 : virtual public A {&nbsp; // 虚拟继承 </span><br style="font-weight: bold;">


<span style="font-weight: bold;">&nbsp;&nbsp;&nbsp; // 实作 </span><br style="font-weight: bold;">


<span style="font-weight: bold;">}; </span><br style="font-weight: bold;">


<br style="font-weight: bold;">


<span style="font-weight: bold;">class C : public B1, public B2 { </span><br style="font-weight: bold;">


<span style="font-weight: bold;">&nbsp;&nbsp;&nbsp; // 实作 </span><br style="font-weight: bold;">


<span style="font-weight: bold;">};</span><br>


</div>



<br>


在上例中,B1与B2以虚拟继承的方式继承了A类别,这个好处是当有类别多重继承了某个基底类别时,在该类别中将会只有一个基底类别存在,而不会有多个复本,例如在上例中,类别C中将只会有一个基底类别A的存在。 <br>


<br>



</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -