nprogram’s blog

気ままに、プログラミングのトピックについて書いていきます

C++

整数値をアスキーコードに変換する方法 (_itoa_s関数使用)

C++

はじめに 例えば、124や0x2Fなどの整数値をアスキーコードに変換しようとする場合は、_itoa_sを使うと簡単に変換できます。 関数仕様については、MSDNのドキュメントをご確認ください。 errno_t _itoa_s( int value, char *buffer, size_t sizeInCharacters,…

Google TestをVisual Studio 2017で簡単導入 [C++]

C++

はじめに 以下の記事に方法が書いてあります。 pickles-ochazuke.hatenablog.com

MFCでBitmapファイルを開く(BITMAPINFOHEADER, BITMAPINFOHEADERを取得) [C++][MFC]

C++

はじめに MFCでBitmapファイルを開く方法を下記に記載します。 <使用例> ソースコードファイルの記載は以下のとおりです。クラスではなく、ユーティリティ関数として作成しました。 [BitmapUtil.cpp] #include "stdafx.h" #include "BitmapUtil.h" bool Load…

Google Test導入方法 [VS2017] [Cmake] [C++]

環境について 以下の環境で、Google Testを使用してみます。 Windows 10 Visual Studio 2017 Community Cmake 3.10.2 C++ なお、Visual Studio 2017 バージョン 15.5 以降では、Google Test が C++ ワークロードでのデスクトップ開発の既定のコンポーネント…

マルチバイト文字列(std::string)とワイド文字列(std::wstring)の間の変換を行うライブラリが便利すぎる [C++]

C++

最近、仕事でMFCのアプリケーションをUnicode対応する仕事をしていて、以下のライブラリを使わせていただきました。 マルチバイト文字列(std::string)とワイド文字列(std::wstring)の間の変換を行うライブラリが便利すぎたので、紹介させてください。 本ライ…

無効パラメータハンドラーとセキュア関数でバッファオーバーラン対策 [C++]

C++

はじめに Microsoft Visual Studio Community 2017を使用して、C++コンソールプロジェクトでプログラムを作成しています。 C++警告レベルはデフォルト(レベル3 (/W3))を使用しています。 セキュア関数を使用しないで、strcpy関数で文字列をコピーした場合 以…

C++11 文法について [C++]

C++

以下のページに詳しく書いてあります。 cpprefjp.github.io 範囲for文 型推論 ラムダ式 型alias typedef ⇒ usingを使おう typedefはオワコン 新初期化記法 リストイニシャライザ override

Observerパターンについて [C++]

C++

Observerとは、英語で観察者を意味します。 Observer パターンとは、状態の変化を観察することを目的としたものですが、どちらかというと「観察」よりも「通知」に重点の置かれたものになっています。 あるインスタンスの状態が変化した際に、そのインスタン…

Strategy Patternについて [C++]

C++

[Duch.h] #include <iostream> using namespace std; //QuackBehavior インターフェース class QuackBehavior { public: virtual ~QuackBehavior() {} virtual void quack() const = 0; //純粋仮想関数(派生クラスに) }; //QuackBehaviorインターフェースを実装したQua</iostream>…

品質を向上させるために、テストクラスを記載しよう [C++]

C++

このように記載すれば、製品のソースコードと、テストクラスのソースコードを分離できます。 #include "box.h" #include <climits> #include <cassert> #include <iostream> class Test { public: Test() { Run(); } static void Run() { // 正常ケース assert(Test(0,0,0,0)); // 異常ケ</iostream></cassert></climits>…

コードレビューで指摘していただいた箇所まとめ [C++]

C++

コードレビューで指摘していただいた箇所をまとめて記載したいと思います。 ポリモーフィズムのための基底クラスには、仮想デストラクタを宣言すること。なぜならデストラクタが virtual でない場合、親クラスの型のポインタを delete した際には親クラスの…

コードレビューの観点まとめ [C++]

C++

今回は、コードレビューの観点まとめについて、記載していきたいと思います。 <コードレビューでプラス事項> 誰がひきついでもわかりやすく、読みやすいコード 変数名や関数名が工夫されていてコメントが少なく読みやすいコード 変数のスコープが必要最低…

独自クラスをstd::vectorに格納する [C++]

C++

std::vector に独自クラスを入れる場合、デフォルトコンストラクタとコピーコンストラクタが必要不可欠みたいです。 d.hatena.ne.jp コピーコンストラクタについては、このページに詳しく書かれています。 http://nobunaga.hatenablog.jp/entry/2016/07/03/2…

自作split関数を用いて、標準入力を、読み出す [C++]

C++

プログラムをメモします。 #include <vector> #include <iostream> #define BIG_BUFFERSIZE 1024 using namespace std; template <typename List> void split(const std::string& s, const std::string& delim, List& result) { result.clear(); using string = std::string; string::size_typ</typename></iostream></vector>…