私は仮想関数とvtableを使いこなしていて、疑問がありました。基本クラスは、派生クラスのプライベートになり、民間、すべてのそれのメンバーとして導出されたときに基本クラスがプライベートで派生した場合、vptrを挿入したコンパイラはプライベートになりますか?
class base
{
public:
virtual void fun(){}
};
class derived : private base
{
public:
void fun(){}
};
スコープルールに:私は以下のようにコードの何かを持っていると仮定し 。コンパイラがvptr(vtableへのポインタ)を挿入すると、派生クラスに対してもプライベートになるのですか?
'vptr'は裏側の概念です。直接アクセスすることもレイアウトを知ることもできないため、「非公開」にはなりません。しかし、それが意味することは、 '派生オブジェクト;を持つ人々は、コンパイラーがそれが私的継承であると不平を言うので、' base * b =&object; 'としてそれにアクセス(変換することも)できないということです。 – inetknght
C++言語では 'vptr'のようなものはありません(ドラフト標準を検索し、あなた自身で見ることができます)。あなたの実装は、その名前で実装技術を使用する(または使用しない)ことがあります。それはプログラムには見えないので、プライベートであるかどうかを尋ねるのは意味がありません。 –
@SergeyAあなたが他の人から引用した習慣に同意しないか、vtableの使用法の詳細のために –