私は主に K&R で C を学んでいますが、今ではオブジェクト指向 C pdf チュートリアルを見つけて、魅了されています。私はそれを行っていますが、私のCスキル/知識はそのタスクに対応していない可能性があります. これはチュートリアルです: http://www.planetpdf.com/codecuts/pdfs/ooc.pdf
私の質問は、pdf の最初の数章でさまざまな機能を調べたところから来ています。以下はそのうちの1つです。(pdfの14ページ)
void delete(void * self){
const struct Class ** cp = self;
if (self&&*cp&&(*cp)->dtor)
self = (*cp)->dtor(self);
free(self);
}
dtor はデストラクタ関数ポインタです。しかし、これに関する知識は私の質問には必要ありません。
- 私の最初の質問は、なぜ **cp が一定なのですか? コード作成者が誤って損害を与えないようにするために、それは必要ですか、それとも単に徹底しているだけですか?
- 第二に、なぜ cp はポインターからポインターへのポインターなのですか (二重アスタリスク?)。struct クラスは、pdf の 12 ページで定義されています。自己ポインターをクラスポインターにキャストしているため、単一のポインターにできない理由がわかりません。
- 第三に、void ポインターはどのようにクラス ポインター (またはクラス ポインターへのポインター) に変更されますか? この質問は、私の C の理解不足を最もよく表していると思います。私の頭の中で想像しているのは、一定量のメモリを占有する void ポインターですが、クラスには多くの「もの」があるため、それはクラス ポインターよりも少なくなければなりません。初期化。void ポインターを別のタイプのポインターに「キャスト」できることは知っていますが、これを実行するのに十分なメモリがない可能性があるため、その方法がわかりません。
前もって感謝します