C++ オブジェクト指向プログラミング:カプセル化・深いコピー・動的メモリ管理の実践

課題1:コンポジションによるGUIコンポーネントの設計 ボタンとウィンドウの関係をコンポジション(has-a関係)で表現します。WindowクラスがWidgetクラスを含む形で実装します。 Widget.hpp #pragma once #include <iostream> #include <string> class Widget { public: explicit Widget(const std::string &name); const std::string& na ...

8月8日 14:29 投稿

C++ Qtでの一時ファイルの処理方法

C++ Qtで一時ファイルを扱う方法について、手動管理やRAIIなどの手法を紹介します。 1. 手動管理 最も基本的な方法として、手動で一時ファイルを作成し、使用後は手動で削除します。コードが単純な場合はこれで十分ですが、複雑なロジックや分岐がある場合、一時ファイルの削除を忘れる可能性があります。 #include <QFile> #include <QDir> void example1() ...

8月6日 07:35 投稿

C++におけるスマートポインタの設計と使用法

RAIIによるリソース管理 RAII(Resource Acquisition Is Initialization)は、オブジェクトの生存期間にリソースの確保と解放をバインドする設計パターンです。メモリ、ファイルハンドル、スレッドなどのリソースは、コンストラクタで確保され、デストラクタで自動的に解放されます。これにより、例外や早期returnがあってもリソース漏れを防ぎます。 スマートポインタと ...

7月26日 23:47 投稿

C++における例外処理の基本とベストプラクティス

例外処理の概要 例外処理は、C++プログラミングにおける重要なエラーハンドリングメカニズムです。戻り値をチェックする従来の方法に比べ、例外はエラーを自動的に伝播させ、メインロジックからエラーハンドリングコードを分離し、複数の関数にまたがる制御フローを処理できます。これにより、各関数で戻り値を繰り返しチェックし、エラーステータスを渡す必要がなくなりま ...

7月18日 01:06 投稿

C++ で MySQL に安全に接続する実践ガイド:Connector/C++ の最新活用法

MySQL Connector/C++ を用いた C++ アプリケーションからのデータベース接続は、パフォーマンスと信頼性を両立させるための鍵となる技術です。本稿では、Visual Studio 2019(および互換環境)を前提に、公式ドライバの現代的な使い方を再構成し、セキュアな接続管理、リソース自動解放、エラーハンドリングの強化、およびマルチスレッド対応を実現する手法を解説します。 ...

7月3日 22:40 投稿

C++ における std::shared_ptr を活用したメモリ寿命の自動制御

C++ 開発において、動的確保されたメモリの解放忘れは重大なバグとなり得ます。従来の生ポインタでは明示的な delete 操作が必要ですが、std::shared_ptr を利用することで参照カウントベースの自動管理が可能になります。 ここでは、試験紙のライフサイクル(作成、回答、採点、破棄)を例に、生ポインタとスマートポインタの実装差異を比較します。 生ポインタによる実装 ...

6月22日 20:02 投稿

固定長・可変長配列を実装するC++シーケンシャルコンテナ

固定長シーケンシャルコンテナ FixedArrayList コンパイル時に要素数が確定する、スタック領域を利用したシンプルなリストである。全要素が連続したメモリブロックに格納され、ランダムアクセスがO(1)で行える。 // FixedArrayList.hpp #pragma once #include "LinearList.hpp" namespace ds { template<typename T, std::size_t N> class FixedArrayList : publi ...

6月18日 18:00 投稿

C++ オブジェクト指向設計の実践:リソース管理とインターフェース設計の詳細

以下はC++を用いたオブジェクト指向設計とリソース管理の実装例についての詳細です。各タスクでは、クラス設計、メモリ管理、カプセル化の実践を通じて、効率的で安全なコード作成の手法を学びます。 タスク1:GUIコンポーネントの実装 #pragma once #include <iostream> #include <string> class PushButton { public: PushButton(const std::string ...

6月3日 21:30 投稿