2

私が今していることは C++ にとって恥ずべきことなのか、それとも OK なのか。

私は計算目的のコードに取り組んでいます。一部のクラスでは、仮想性/多態性を備えた通常の継承スキームを使用します。しかし、集中的な計算を行うにはいくつかのクラスが必要であり、仮想性によるオーバーヘッドを回避することは素晴らしいことです.

基本的に、私はこのクラスをポインターやリダイレクトなしで使用したいと考えています。継承は、コードの多くのコピー/貼り付けを避けるためにここにあります (基本クラスのファイルサイズは 60Ko のようです (これは大量のコードです))。したがって、仮想関数も仮想デストラクタもありません。

C++ の観点からはまったく問題ないのか、それとも副作用が発生する可能性があるのか​​ (関連するクラスはプログラムで頻繁に使用されます)。

どうもありがとうございました。

4

6 に答える 6

5

C++ でポリモーフィズムを使用することは、良いことでも悪いことでもありません。ポリモーフィズムの欠如と同様に、ポリモーフィズムは目的を果たします。ポリモーフィズムを単独で使用せずに継承を使用しても問題はありません。

ポリモーフィズムには目的があり、ポリモーフィズムがないことにも目的があるため、これらの目的を念頭に置いてクラスを設計する必要があります。たとえば、クラス インスタンスへの動作のランタイム バインドが必要な場合は、ポリモーフィズムが必要です。

とはいえ、一方のアプローチを他方よりも選択するのには、正しい理由と間違った理由があります。「オーバーヘッドを回避したい」という理由で厳密にポリモーフィズムなしでクラスを設計している場合、それはおそらく間違った理由です。これは、コードのプロファイルを作成せずに設計の変更や決定を行い、ポリモーフィズムが実際の問題であることを証明していない限り、時期尚早の最適化の例です。

最初にアーキテクチャ要件に従って設計します。設計が非パフォーマンスであることが判明した場合は、後で戻ってリファクタリングします。

于 2012-05-23T13:10:05.377 に答える
4

私は質問を言い換えます:

ポリモーフィズムを避けた場合、継承は合成では達成できなかったものをもたらしますか?

答えが何もない場合は、おそらくその継承はそもそも必要ありません。

于 2012-05-23T13:16:02.633 に答える
3

メンバー/継承を使用しないvirtualことはまったく問題ありません。C++ は、多くの聴衆を楽しませるように設計されており、誰もが特定のパラダイムに制限されることはありません。

C++ を使用して、手続き型、汎用、オブジェクト指向、またはそれらの組み合わせをコーディングできます。それを最大限に活用するようにしてください。

私が現在行っているのは、C++ の恥、またはそれで問題ない場合です。

全くない。
むしろ、オブジェクト指向のデザインが必要ないのに、そのためだけにオブジェクト指向のデザインを押し付けるのは残念です。

基本的には、ポインターやリダイレクトなしでこのクラスを使用したいのですが...

実際、あなたは正しい方向に向かっています。ポインター、配列、およびそのような低レベルの機能を使用することは、高度なプログラミングに適しています。std::shared_ptrstd::vector、および標準ライブラリ コンテナのように代わりに使用します。

于 2012-05-23T13:06:21.717 に答える
1

基本的に、ポリモーフィズムなしで継承を使用しています。そして、それは大丈夫です。

オブジェクト指向プログラミングには、ポリモーフィズム以外の機能があります。それらから恩恵を受けることができる場合は、それらを使用してください。

于 2012-05-23T13:11:31.373 に答える
1

一般に、継承を使用してコードを再利用することはお勧めできません。継承はむしろ、基本クラスを使用するように設計されたコードによって使用されます。問題に対する別のアプローチを提案します。コンポジション、基本クラスではなくフリー関数で実装される機能の変更、または静的ポリモーフィズム (テンプレートの使用による) など、いくつかの代替案を検討してください。

于 2012-05-23T13:41:49.983 に答える
0

あなたがそれを証明することができるまで、それはパフォーマンスの問題ではありません

その答えと「可能な限り最速の代表者」の記事をチェックしてください。

于 2012-05-23T13:22:04.773 に答える