質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

C++でclassにfinalを控えめに使うべき理由について

altzweel
altzweel

総合スコア11

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

6回答

0評価

3クリップ

1247閲覧

投稿2021/05/21 08:39

C++ Core Guidelinesを読んでいて納得できない部分があります。

C.139: Use final on classes sparinglyの項目です。

calssに対するfinalを控えめにするという項目で、理由として以下の様に書いてあります。

Reason Capping a hierarchy with final classes is rarely needed for logical reasons and can be damaging to the extensibility of a hierarchy.

  • 継承を禁止する論理的な理由があることはめったにない
  • クラスの拡張性を損なう

という内容かと思いますが、個人的には納得できませんでした。
constを推奨するのと同じような理由でfinalは積極的に使っていきたいように感じます。

この理由について掘り下げて議論している書籍、Webの情報などが知りたいです。
独自見解、他言語での状況などでも大丈夫です。

基本的には納得してCore Guidelinesに従いたいと思っているので、こうするべきとされている理由をより深く知りたいです。

よろしくおねがいします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Zuishin

2021/05/21 09:15

継承を禁止することによるメリットは何ですか?
altzweel

2021/05/24 03:47

自分で書いていると、基底クラスを継承したクラスはさらに継承されることを考えないので、禁止したほうが意図が明確で想定外のバグが減ると思いました。
Zuishin

2021/05/24 05:11

ふつうは継承を考えて作り、継承してはいけないものを明示的に final にするものだと思います。 基本的に継承しないという作り方が特殊なので、通常のガイドラインは適用できないかと。 final をつけるつけない以前に、クラスの作り方を見直すか、見直せないならそのガイドラインを受け入れないようにするかという選択になるのではないでしょうか。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。