From: Masao M. <mu...@hi...> - 2007-07-15 03:05:03
|
むとうです。 On Sun, 15 Jul 2007 00:45:00 +0900 (JST) Masahiro Sakai (酒井政裕) <sa...@to...> wrote: > 酒井です。 > > 現在、Atk::TextRange は ATk::TextRectangle のサブクラスとして実装されて > いますが、この両者が is a の関係とは思えないので、これは変ではないでしょ > うか? うーん。 たぶん、以下のコードをイメージしてRangeはRectangleとis aの関係だと 思って実装したんじゃないかと思います。 ---- #include <stdio.h> #include <stdlib.h> typedef struct _AtkTextRectangle { int x; } AtkTextRectangle; typedef struct _AtkTextRange { AtkTextRectangle bounds; int start_offset; } AtkTextRange; int main(int argc, char *argv[]) { AtkTextRange *a = malloc(sizeof(AtkTextRange)); a->start_offset = 1; ((AtkTextRectangle*)a)->x = 5; /* このキャストができる。*/ printf("start_offset = %d\n", a->start_offset); printf("x = %d\n", ((AtkTextRectangle*)a)->x); /* このキャストができる。*/ } ---- まぁ、キャストができるからis aか、と言われると違うと言われれば 違うような気もしますが、でもキャストができるんだからis aなんじゃ なかろうかというような気もしないでもないです。 でも、逆に、なんでここって、 typedef struct _AtkTextRange { AtkTextRectangle* bounds; /* これ */ int start_offset; } AtkTextRange; じゃないんですかね。これだったらis aの関係ではないと 私もわかるんですけど・・・。 Pointerにしなかったのは単にメモリ管理が楽だから? この辺、まともに勉強してきていないので、どう考えるのが正しいのか 教えていただけると(というか文献等でも)ありがたいのですが・・・。 -- .:% Masao Mutoh<mu...@hi...> |