(N3485)10.1.4 [class.mi]それは言う:ほとんどの派生クラスのクラス格子における非仮想基底クラスの各別個の出現について仮想ベースと非仮想ベースが混在するC++ 11クラスの格子?
を最も派生したオブジェクトは、対応する基本クラスのサブオブジェクトをそのタイプのものとする。 仮想を指定された各個別の基底クラスの
、ほとんどの派生クラスは、そのタイプの単一基本クラスのオブジェクトを含まなければなりません。
struct B {}; struct BV : virtual B {}; struct BN : B {}; struct C1 : BV, BN {}; struct C2 : BV, BN {}; struct D : C1, C2 {};
まず、明確にするために、Dのクラス格子がどのように多くの頂点を持っています:
は、以下のC++ 11のコードを検討しますか
第2に、タイプBのいくつかの異なるサブオブジェクトでは、タイプDの最も派生したオブジェクトに標準が必要ですか?
更新:
以下のクラスの格子のですか?
(1)
B B B B
^ ^ ^^
| | | |
BV BN BV BN
^ ^ ^^
| | | |
\ / \/
C1 C2
\ /
\ /
- D -
(2)
B<---------
^ \
| |
| B | B
| ^ | ^
| | | |
BV BN BV BN
^ ^ ^^
| | | |
\ / \/
C1 C2
\ /
\ /
- D -
(3)
B
/\
/ \
BV BN
| \/|
| \/ |
|/\ |
|/ \|
C1 C2
\ /
\/
D
の意図は、(1)それは不可能ではないことである場合ツリーではないDAGを持つことはできますか? (つまり、ダイヤモンドは不可能です)もしそうなら、それをクラスツリーと呼ぶ方が良いでしょうか?
(2)の場合、「クラス格子内の各基本クラスの出現ごとに、対応する基本クラスのサブオブジェクトがある」と言うだけでは不十分ですか?つまり、ラティスの構築が既にエッジと頂点を選択するために仮想クラスと非仮想の基本クラスの関係に依存する場合
(3)の場合、クラス格子内にクラスが1つしか存在しないため、標準では言語が正しくありませんか?
1. 10の頂点があります。2. 2つの非仮想Bと1つの仮想Bがあります。 –
@fatih_k:10にどのように到着しましたか? –
DからCには2つの頂点、C1からBの2、C2からBの2まであり、仮想Bへの2つのBV 'と1つの頂点とBNからBへの2つの頂点があります。 –