ここから本文です

C++のクラスまでを学校で習ったのですが、クラスを最大限利用したプログラムの課題...

アバター

ID非公開さん

2019/5/2823:00:03

C++のクラスまでを学校で習ったのですが、クラスを最大限利用したプログラムの課題などありませんか?

コンテナなども使い慣れておきたいのでそれも入れてお願いします。

閲覧数:
67
回答数:
2

違反報告

ベストアンサーに選ばれた回答

nic********さん

2019/5/2919:25:59

>メモリ開放漏れにならないようにするのは、結構 デリケートです。
C#やVBでは.NET Frameworkによるガベージコレクションによる自動開放が行われますが、C++では Boost C++ Librariesの <boost/smart_ptr.hpp>や C++標準の<memory>でスマートポインタが役割を果たしてくれます。

Smart pointers are objects which store pointers to dynamically allocated (heap) objects. They behave much like built-in C++ pointers except that they automatically delete the object pointed to at the appropriate time. Smart pointers are particularly useful in the face of exceptions as they ensure proper destruction of dynamically allocated objects. They can also be used to keep track of dynamically allocated objects shared by multiple owners.

スマートポインタは、動的に割り当てられた(ヒープ)オブジェクトへのポインタを格納するオブジェクトです。これらは、適切な時点でポイントされているオブジェクトを自動的に削除する点を除いて、組み込みC++ポインタと同じように動作します。スマートポインタは、動的に割り当てられたオブジェクトを適切に破棄するため、例外が発生した場合に特に便利です。また、複数の所有者が共有する動的に割り当てられたオブジェクトを追跡するためにも使用できます。

Conceptually, smart pointers are seen as owning the object pointed to, and thus responsible for deletion of the object when it is no longer needed. As such, they are examples of the "resource acquisition is initialization" idiom described in Bjarne Stroustrup’s "The C++ Programming Language", 3rd edition, Section 14.4, Resource Management.

概念的には、スマートポインタは、指し示されたオブジェクトを所有していると見なされるため、オブジェクトが不要になったときにそのオブジェクトを削除する役割を果たします。これらは、Bjarne Stroustrupの「C++プログラミング言語」第3版、セクション14.4、リソース管理で説明されている「リソース取得は初期化」イディオムの例です。

https://www.boost.org/doc/libs/1_70_0/libs/smart_ptr/doc/html/smart...

より。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

man********さん

2019/5/2900:49:28

「複素数を分子分母にする四則演算と"coutへの<<出力”が可能なクラスの定義」を出来れば、高校の数学レベルの計算が出来て、良いでしょう。

Ruby言語だと、クラス定義しなくても、下記の2行で、計算結果を表示できるが、C++だと、"operator +"とか"operator <<"とかのオーバロードも含めて、それなりに面倒です。

p y=(12345678901234567890.0 /(1.0 - 12345678901234567891.0i)) - (12345678901234567891.0/(1.0 + 12345678901234567890.0i))

=>(0.0+2.0i)

p x=Rational(12345678901234567890 ,(1 - 12345678901234567891i)) - Rational(12345678901234567891,(1 + 12345678901234567890i))

=>((-228623681298582551271376318164380429986/11615286144559076666048468336368822614758804202921592629334943372565917420041)+(23230572289118153332096936672737645229441400512076991074912761305743708030085/11615286144559076666048468336368822614758804202921592629334943372565917420041)*i)

Rubyでの実行結果は、https://ideone.com/41yUao

こんな風に、浮動小数点演算も、多倍長整数演算も、選択できるようなgenericーtemplate classの定義まで C++で、できれば、中々 優秀だと 言えます。

ただし、デストラクタの呼び出しとかもして、メモリ開放漏れにならないようにするのは、結構 デリケートです。

他の言語だと、メインルーチンというか、「ヤリタイ 計算式だけを指定する」だけで済むのに、C++だと、「ヤリタイコト の 定義を 教えるとことから 始まる」ということの面倒さを、どう思う?

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる