📄 protectedprivateinheritance.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>保护(protected)继承、私用(private)继承</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: 保护(protected)继承、私用(private)继承</a></h1>
在继承时采公开(public)继承的方式来继承一个类别时,父类别与子类别为<span style="font-weight: bold;">"is-a"</span>的
关系,子类别继承父类别的公开(public)介面及受保护(protected)的成员,子类别是父类别的细化型态。 <br>
<br>
保护(protected)继承可以改变继承下来的基底类别成员权限,保护的意思就是让这些成员继承下来之后,保护它们仅能在类别与衍生类别中使用,保护
继承的语法如下所示: <br>
<div style="margin-left: 40px;"><span style="font-weight: bold; font-family: Courier New,Courier,monospace;">class B : protected A {
</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace;">
<span style="font-weight: bold; font-family: Courier New,Courier,monospace;">
// 实作 </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace;">
<span style="font-weight: bold; font-family: Courier New,Courier,monospace;">};</span><br>
</div>
<br>
保护继承时使用protected来继承基底类别,继承下来的成员在衍生类别中的权限变为如下:<br>
<table style="text-align: left; width: 25%;" border="1" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="background-color: rgb(204, 204, 204);"><small>基底类别</small></td>
<td style="background-color: rgb(204, 204, 204);"><small>衍生类别 </small></td>
</tr>
<tr>
<td><small>private</small></td>
<td><small> 不继承 </small></td>
</tr>
<tr>
<td><small>protected</small></td>
<td><small>protected </small></td>
</tr>
<tr>
<td><small>public</small></td>
<td><small>protected</small></td>
</tr>
</tbody>
</table>
<br>
简单的说,原来的权限在protected以下的保留其原来权限,而在protected以上的就降为protected,子类别protected继承
的目的在只希望保留父类别中已实作的公开成员与受保护的成员为己用或接下来的衍生类别使用,并提供自己的公开介面。<br>
<br>
您也可以在继承基底类别之后,将它所有的成员一律改为私用(private),使用私用(private)继承可以达到这个目的,其语法如下: <br>
<div style="margin-left: 40px;"><span style="font-weight: bold; font-family: Courier New,Courier,monospace;">class B : private A { </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace;">
<span style="font-weight: bold; font-family: Courier New,Courier,monospace;">
// 实作 </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace;">
<span style="font-weight: bold; font-family: Courier New,Courier,monospace;">}; </span><br>
</div>
<br>
<br>
基底类别中的成员在被继承之后,其权限如下所示: <br>
<table style="text-align: left; width: 25%;" border="1" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="background-color: rgb(204, 204, 204);"><small>基底类别</small></td>
<td style="background-color: rgb(204, 204, 204);"><small>衍生类别 </small></td>
</tr>
<tr>
<td><small>private</small></td>
<td><small>不继承 </small></td>
</tr>
<tr>
<td><small>protected</small></td>
<td><small>private </small></td>
</tr>
<tr>
<td><small>public</small></td>
<td><small>private</small></td>
</tr>
</tbody>
</table>
<br>
private继承被称为“实作继承”,意味着子类别只想保留父类别中已实作的公开与受保护的成员为己用,并提供自己的公开介面与接下来会被继承的受保护
的成员。<br>
<br>
<br>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -