• ベストアンサー

オーバーライト、それとも、オーバーライド?

C++で、スーパークラスで定義されている関数を 継承したクラスで定義しなおすことをオーバーライトと いうのでしょうか? それとも、オーバーライドと いうのでしょうか? override と overwrite を辞書で調べてみたんですが、 どちらも、よく似た意味のようで…。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KOH_da
  • ベストアンサー率31% (161/506)
回答No.2

オーバーライドが正解。 オーバーライトは上書きって意味ですが、 ファイルの上書きという意味でよく使います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.1

オーバーライドです

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • オーバーライドについて

    はじめまして。 変な質問ですみませんが質問させてください。 オーバーライドの定義についてなのですが、 オーバーライドとは、スーパークラスで定義した、メソッドの メソッド名と戻り値のデータ型と引数の数とそのデータ型が等しい メソッドをサブクラスで定義することであると、 認識しているのですが、間違いでしょうか、 特に、戻り値のデータ型はスーパークラスとサブクラスとで同じでなけ ればならないんですよね? ご教授お願いします。

    • ベストアンサー
    • Java
  • オーバーライド関数の呼び出し元を判定するにはどうしたらよいでしょうか?

    オーバーライド関数の呼び出し元を判定するにはどうしたらよいでしょうか? 基底クラスはCPropertyPageで、そこから複数階層まで継承しています。 末端クラスの関数が呼ばれたとき、それがどの派生クラスから呼ばれたかによって処理を分けたいのですがどうしたら良いでしょうか?

  • オーバーライドとは?

    こんばんわ。 いまVB.Net2005でプログラミングをしている者です。 Overrideという機能がありますが, 使い方がよくわかりません。 継承元側で定義したプロシジャ(△△△△)と同じ名前のプロシジャを 派生先側で定義しました。 派生先側でInherits ○○○○として, 派生先側の当該プロシジャ内で, MyBase.△△△△として, さらに派生先側の独自の処理を続けました。 このような使い方でよいのでしょうか? なおこのような使い方をするときに, わざわざOverride句を指定する必要があるのでしょうか? 初歩的な質問になるかもしれませんが, 教えてください。よろしくお願いします。

  • オーバーロード、オーバーライド、コンストラクタについて

    オブジェクト指向と言われているオーバーロード、オーバーライドの違いを詳しく教えてください。また、コンストラクタがオーバーライドするってことはあるのでしょうか?? 一応、スーパークラス・サブクラスという言葉は知っています。

    • ベストアンサー
    • Java
  • 問題の解説お願いします。(オーバーロード&オーバーライド)

    class A{ protected int method1(int a , int b){ return 0; } } クラスAを継承したクラスで同時に定義できるメソッド が、 public int method1(int a,int b){return 0;} が良くて private int method1(int a,int b){return 0;} static protected int method1(int a,int b){return 0;} がだめな理由がいまいちわかりません。 法則みたいなものにこう書いてありました。 (オーバーロードについて) 同一クラス内に同一名称のメソッドを定義することができます。 ただし、それらは引数が異なるものでなければならず、 アクセス制御修飾子や戻り値の型だけが異なるメソッドは 定義することができません。 (オーバーライドについて) サブクラスでは、スーパークラスに存在するメソッドと同一引数・ 同一戻り値型を持つメソッドを定義することが許されています。 これら以外にも何か決まりがあるのでしょうか よろしくお願いします。

    • ベストアンサー
    • Java
  • 抽象クラスからオーバーライドについて

    EclipseでJavaを勉強始めました。 抽象クラスからオーバーライドするところで質問致します。 抽象クラスとして、「面積を計算する」というメソッドをもつDiagramクラスを定義しました。それを継承して、「四角形の面積を計算する」というメソッドをもつSquareクラスと、「三角形の面積を計算する」というメソッドをもつTriangleクラスを定義しました。 Squareクラス、Triangleクラスからインスタンスを生成して、四角形、三角形の面積をコンソールに表示させるという簡単なプログラムです。 このとき、main関数と3つのクラスの関係についてお尋ねします。 (1)iagram.java、Square.java、Triangle.javaそれぞれにクラス定義とmain関数を持たせるパターン public abstract class Diagram { // 面積計算定義(抽象メソッド) public static void main(String[] args) { } } public class Square extends Diagram{ //四角形の面積の計算定義 public static void main(String[] args) { //四角形の面積の計算と表示 } public class Triangle extends Diagram{ //三角形の面積の計算定義 public static void main(String[] args) { //三角形の面積の計算と表示 } (2)sample.javaというファイルにまとめ、その中にこの3つのクラス定義とmain関数を一つ持たせるパターン public class sample { public static void main(String[] args) { //四角形の面積の計算と表示 //三角形の面積の計算と表示 } } abstract class Diagram { // 面積計算(抽象メソッド)定義 } class Square extends Diagram{ //四角形の面積の計算定義 } class Trapezoid extends Diagram{ //三角形の面積の計算定義 } この二通りを考えて、どちらも実行できたのですが、どちらの方がJavaらしいプログラムと思われますでしょうか?

    • ベストアンサー
    • Java
  • オーバーライドをやめた時

    VC++6.0、SDIのスプリットウィンドウを使用しています。 リストビュークラスを2段階に継承している場合に、試しに一度孫クラス1にOnLButtonDownハンドラをオーバーライドして左ボタン押下時に実行されることをブレークポイントにて確認後、やっぱりもうひとつ上のクラスでオーバーライドしようと思い、子クラスにOnLButtonDownハンドラをオーバーライドし、孫クラス1からOnLButtonDownハンドラを削除したところ、左ボタンを押下しても子クラスの街頭ハンドラが呼ばれません。 ノータッチだった孫クラス2では思惑通りに子クラスのハンドラが呼ばれています。 孫クラス1に何か痕跡が残っていてそちらに引っ張られているのでしょうか? ハンドラの追加・削除は全て暮らすウィザードを使用しました。 どなたかわかる方、ご教示よろしくお願います。 class CKoListView : public CListView {  ・・・・ } class CMago1ListView : public CKoListView {  ・・・・ } class CMago2ListView : public CKoListView {  ・・・・ }

  • オーバーライドの必要性

    まだまだJavaを勉強している途中なのですが、下記のサンプルコードでオーバーライド(メソッドをオーバーロードすることをオーバーライドというのでしょうか…!?)のの必要性がよく分からなくなってしまったので質問させて頂きました。 /* sample.java */ abstract class super_class{  void write(){} } class CLASS1 extends super_class{  void write(){ System.out.println("CLASS1"); } } class CLASS2 extends super_class{  void write(){ System.out.println("CLASS2"); } } class sample{  public static void main(String args[]){   super_class obj = new CLASS2();   obj.write();   obj = new CLASS1();   obj.write();  } } 以上のコードを実行した場合 CLASS2 CLASS1 と表示されるのは多少なりとも勉強して分かったつもりでした…。 しかし、あくまでサンプルであるために特に意味がないことでもオーバーライドの説明をしているのだろうという風に考えてしまったのですが、 結局は、 スーパークラスとサブクラスに同じシグネチャのメソッドがあった場合、各サブクラスのメソッドが実行される と言うことは、スーパークラスのwrite()メソッドは何をしているのでしょうか? 多様性はJavaでも大切なものであるとのことなので質問させて頂きました。 なるべくわかりやすく説明して頂きたいと思います。 どうかお答えをお願いします。

    • ベストアンサー
    • Java
  • 親クラスとオーバーライドらへんのこと

    はじめまして、最近c++をはじめたものです。 質問があります。 サブクラスで親クラスのメソッドをオーバーライドした時に、 そのメソッドの中で親クラスのメソッド(オーバーライドした)をメソッドを呼び出したいのですが。 やりかたがわかりません。 要するに、javaでいうsuperを使いたいのですが。。 コードで書くとこんなかんじです。 class base { public: int abc(); } class derived : public base { public: int abc(); } int derived::abc() { super.abc() //←ここの部分がわかりません。 他の処理 }

  • 継承を重ねた場合のコストはどうなるのでしょうか?

    仮想関数を使った方がはるかに楽になる場合で、意味的にもまさに継承がベストという場合を除いては継承は使わない、使う場合も、なるべく1回で、かつ一つで十分になるような方法を考える方針できたのですが 今までは手持ちの情報的に問題ないだろうとおもっていたのですが、ある新事実が発覚したため 一回の継承では別々の親クラスとして作ることとなり、あとで同じ基底クラスのポインタとして扱えないタイミングが生じて面倒が出るか、あるいはそれ以外で一つにまとめようとするとどの方法をとっても非常に大きなコードの無駄が生じることになり コスト的に問題なく出来るなら二段に継承したいという状況が発生しました。 現在1段の継承をしている状態で、基底クラスは別々に二つあり、どちらも抽象クラスで、もしこれらのさらに親クラスを同じものとして作るような形に変更した場合、二段階に継承するといっても、どちらにしてもその時に最終的に完成する、3段目の孫クラスで始めて実体を作れる(コンストラクタを呼べる)ようになる つまり、そうなっても親と子は抽象クラスという状態になります。 真ん中のクラスで、一番上のクラスの純粋仮想関数をoverrideする関数もいくらかは出てくるかもしれませんが、定義せずに残す事が確実に決まっている関数も既に存在しますし、逆に真ん中のクラスで増える純粋仮想関数も存在する見込みです。 こういった状況で、問題と考えられるのはただ一つ、コストに関して、なのですが 全ての仮想関数は、オーバーライド回数は親・子・孫間で必ず1回に限定されるようにプログラムする場合 1. 結局それに関しては一回分の継承とまったく同じコストになると考えて良いでしょうか? つまり仮想関数が、だいたいは関数ポインタのような原理で動いているとすれば、テーブルの要素(?)が増えた場合にコストが変わる、とか、継承回数が変わると一番上で宣言した純粋仮想関数を、真ん中でまったくoverrideせずに孫クラスでoverrideした場合、一段階しか継承せずに(単純に親クラスで宣言したのを子クラスでoverride)した場合とは実はコストが変わるとか そういう事はまずないと考えて良いのでしょうか? 2. 仮想関数で最も恐れるべきはキャッシュミスだと思うのですが、それについての危険性はそれほどかわりがない、でしょうか?簡単なクラスでベンチマークをとった結果は、「特定の範囲で繰り返してるだけ」に近かったせいか、クラスが小さかったせいか、横にはせまかったせいか、ほとんど変わりが分かりませんでした。) 3. コンストラクタやデストラクタについては、極力初期化リストで初期化、というパターンに頼った場合 かつ、孫クラス以外の、親クラスと子クラスは抽象クラスとなる、場合で かつ、親クラスのコンストラクタ、デストラクタはインライン化宣言されていて(つまり子クラスのコンストラクタ・デストラクタを呼ぶときにはその実装が既に見える位置に記述されるようになっていて) 子クラスのそれらはインライン宣言されていない という状況の場合、単純に1段階の継承のみで基底クラスのそれらがインライン宣言されていない場合と、最終的にコストは等価になると考えてもいいのでしょうか?