回答編集履歴

2

追記

2015/12/22 16:56

投稿

Stripe
Stripe

スコア2183

test CHANGED
@@ -21,3 +21,25 @@
21
21
 
22
22
 
23
23
  virtualな関数を呼び出そうとすると、このジャンプテーブル内の関数ポインタを使って動的に関数を呼び出すコードがコンパイラによって生成されます。
24
+
25
+
26
+
27
+ ---
28
+
29
+
30
+
31
+ > ポインタはどのように、指すクラスが適切なのかを判断しているのでしょうか?
32
+
33
+
34
+
35
+ これは、「コンパイラはどのように、指すクラスが適切なのかを判断しているのでしょうか?」ということですよね?
36
+
37
+ 単純に、クラスの継承関係を見て判断しています。
38
+
39
+
40
+
41
+ > humanクラスから派生されたから、human classのポインターで派生クラスを示せるというのは概念的、機能的には理解できますが
42
+
43
+
44
+
45
+ 継承関係があれば問題ないことは、理解しているということでいいんですよね?

1

訂正

2015/12/22 16:55

投稿

Stripe
Stripe

スコア2183

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  protected:
12
12
 
13
- void* jumpTable[1]; // この中にspeak()関数のポインタが入ります。
13
+ void** jumpTable; // この中にspeak()関数のポインタが入ります。
14
14
 
15
15
  };
16
16