overrideとoverload


delphi5つかってます。  2010-01-21 15:03:24  No: 37115

overrideとoverloadの違いと使い方がわかりません。わかりやすいウェブサイトをご存じの人いますか?  自分でも調べてみたのですが、なかなか本質的に理解できるものがありません。


igy  2010-01-21 18:38:55  No: 37116

メソッド
http://docs.codegear.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/JA/html/devcommon/methods_xml.html

はいかがですか?


ttt  2010-01-21 18:45:52  No: 37117

overrideとoverloadは、たまたま語感が似ているだけで直接的には関係のない概念です。
同じ名前だけど実体が異なる、というところは共通していなくもないですが
基本的には別物と思ってください。

overloadは単に「別々の関数に同じ名前を付けられる」という機能。
IntToStrなどで日常的にお世話になっているはずです。
(もしoverloadがなかったら、引数の型によって IntToStr64, IntToStr32, ... といちいち調べて使い分けないといけなくなります)

一方のoverrideは、virtualと対にして使うもので、オブジェクト指向の実現上不可欠なものです。
親クラスで定義したメソッドを、子クラスで置き換えるのがoverrideです。
「仮想関数」「多態(ポリモーフィズム)」といったキーワードで調べれば解説が見つかると思います。


delphi5つかってます。  2010-01-22 09:01:00  No: 37118

overloadはよく理解できたのですが、overrideの使い方がいまいちつかめません。どのような状況で使われますか?


ttt  2010-01-22 12:04:37  No: 37119

> どのような状況で使われますか?
上で書いたように、親クラスのメソッドを子クラスで置き換える時です。
よく使いそうな例で言うと、TStream.WriteをTFileStream.WriteやTMemoryStream.Writeでoverrideする時などです。

overrideはクラスの継承、多態性、仮想関数と結びついているもので
これらの概念がわかれば自然にわかりますし、
逆にそれらの前提知識なしにoverrideの意味だけ説明されても理解できないんじゃないかと思います。

単にDelphiでどういう時にoverrideを使うかという規則が知りたいだけなら
「(ヘルプで調べて)親クラスのメソッドに virtual か override が付いていたら、
子クラスでそのメソッドを実装する時にはoverrideを付けないといけない」
と覚えておけばいいのではないでしょうか。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加