SSブログ

C++ クラス -継承- [開発環境]

参考サイト

http://www.geocities.jp/ky_webid/index_old.html

http://www.s-cradle.com/developer/sophiaframework/tutorial/Cpp/inherit.html

◆継承(インヘリタンス)

クラスには継承と呼ばれるメカニズムがあり、これにより既存のクラスの再利用性が高まります。継承を使うと次のようなことが実現できます。

  • 既存クラスに機能を追加した新しいクラスを定義する。
  • 既存クラスの挙動をカスタマイズした新しいクラスを定義する。
クラスの継承による機能追加

ここに鉛筆があるとします。鉛筆には芯があり、書くたびにどんどん小さくなっていきます。これをクラスにしてみましょう。

class Pencil
{
private:
SIntN core; // 鉛筆の芯の長さ
public:
Void Write()
{
core -= 1; // 書くたびに芯が 1mm ずつ小さくなる
if (core < 0) core = 0;
}
};



 



あるとき、鉛筆の後ろに消しゴムをくっつけた新製品が売り出されました。消しゴム付き鉛筆です。消しゴム付き鉛筆は、鉛筆と同じ機能をもちながら、さらに消しゴムの機能ももっています。



このように機能が追加されたクラスは次のように定義することができます。




class ErasePencil : public Pencil
{
private:
SIntN rubber; // 消しゴムの大きさ
public:
Void Erase()
{
rubber -= 1; // 消すたびにゴムが 1 立方mm ずつ小さくなる
if (rubber < 0) rubber = 0;
}
};



class キーワードに : public Pencil を指定することで、Pencil のメンバ変数とメンバ関数を引継ぐことができます。つまり、ErasePencil はメンバ変数 core とメンバ関数 Write() をもっています。それに加えて、新しく定義したメンバ変数 rubber とメンバ関数 Erase() ももっています。したがって、次のようなコードを書くことができます。




ErasePencil pen;
pen.Write(); // Pencil クラスから引き継いだメンバ関数の呼び出し
pen.Erase(); // ErasePencil クラスで新たに定義したメンバ関数の呼び出し



 



このように、既存のクラスのメンバを引き継ぐことを継承といいます。引き継ぎの元となるクラスを基底クラス、引き継いで新しく定義したクラスのことを派生クラスといいます。「ErasePencil は Pencil の派生クラスである」とか「Pencil は ErasePencil の基底クラスである」という言い方をします


Windows7でgrepを使う [開発環境]

フレームワークなどの膨大なファイルから必要な文字列を所在を検索するために、Linuxではgrepコマンドが使われる。これをWindows7上で行う方法を調べた。

1. cygwinのダウンロードとインストール

このサイトから"setup.exe"をダウンロードします。

image

setup.exe を起動します。

image

image

インストール先を”e:\cygwin”に変更しました。ここは各自の環境により変更してください。

image

image

インターネットへの接続方法を指定します。

image

日本のサイトを選びました。

image

パッケージの選択画面です。あとから変更可能なので、ここではデフォルトのまま進みます。

image

image

完了です。

image

2. Cygwinの確認

デスクトップにできたCygwinアイコンを起動します。

image

grepのバージョンを確認してみる。

image

3. Cygwinを使う

① cドライブにアクセスする。

“mount”コマンドで現在のマウントポイントを確認する。

image

cドライブは、”/cygdrive/c”にマウントされている事がわかる。

cドライブへ移動し、”ls”コマンドでファイル内容を確認してみる。

image

“c:\”のファイルが確認できている。

② フォルダ移動

grepしたいディレクトリに移動する。スペースや()等の特殊記号が含まれるホルダーへの移動は記号の前に”\”を追加します。例えば、

”c:\Progeam Files (x86)” へ移動する場合、以下と記述します。

$ cd c:\Program\ Files\ \(x86\)




image



③ grepする



書式



$ grep [オプション] パターン ファイル



◆ <INtime>フォルダー以下にあるファイル群から”BEFORE_INIT”を含むファイルを探すには。




$ grep –n –r BEFORE_INIT INtime




◆ ヘッダーファイルのみを対象に検索する場合。




$ find INtime –name  *.h | xargs grep –n –r BEFORE_INIT




xargs はfind で見つかった全ファイルのパスを、一度に grep に渡している。



オプションは




-b:行のブロック番号をつける
-c:パターンに一致した行の行数のみを出力する
-h:複数ファイルを指定した際にファイル名を出力しない
-i:大文字小文字を区別しない
-l:パターンに一致した行を含むファイル名だけを出力する
-n:パターンに一致した行のファイル内での行番号を出力する
-s:エラーメッセージのみを出力する
-v:パターンに一致しない行のみを出力する
–color:一致文字列に色を付ける
-o:一致した文字列だけを出力する
-r:特定ディレクトリ以下を再帰的に検索する


スタティックライブラリの作成と使用(C++) [開発環境]

msdnより

1. スタティックライブラリ プロジェクトの作成

① [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

② プロジェクトの種類ペインで、[Visual C++] の [win32] をクリックします。

③ テンプレート ペインの [Win32 コンソール アプリケーション] をクリックします。

④ プロジェクトとして「MathFuncsLib」などの名前を付け、[プロジェクト名] フィールドに入力します。ソリューションとして「StaticLibrary」などの名前を付け、[ソリューション名] フィールドに入力します。

image

⑤ [OK] をクリックして、Win32 アプリケーション ウィザードを起動します。[Win32 アプリケーション ウィザード] ダイアログ ボックスの [概要] ページで、[次へ] をクリックします。

image

⑥ Win32 アプリケーション ウィザードの [アプリケーションの設定] ページで、[アプリケーションの種類] の [スタティック ライブラリ] を選択します。

⑦ Win32 アプリケーション ウィザードの [アプリケーションの設定] ページで、[追加のオプション] の下にある [プリコンパイル済みヘッダー] の選択を解除します。

image

⑧ [完了] をクリックして、プロジェクトを作成します。

 

2. クラスを追加する。

① 新しいクラスのヘッダー ファイルを作成するには、[プロジェクト] メニューの [新しい項目の追加] をクリックします。[新しい項目の追加] ダイアログ ボックスが表示されます。カテゴリ ペインで、[Visual C++] の [コード] をクリックします。テンプレート ペインの [ヘッダー ファイル (.h)] をクリックします。ヘッダー ファイルとして「MathFuncsLib.h」などの名前を付け、[追加] をクリックします。空白のファイルが表示されます。

image

② 加算、減算、乗算、除算などの一般的な数値演算を行うための、MyMathFuncs という名前の単純なクラスを追加します。コードは次のようになります。

// MathFuncsLib.h

namespace MathFuncs
{
class MyMathFuncs
{
public:
// Returns a + b
static double Add(double a, double b);

// Returns a - b
static double Subtract(double a, double b);

// Returns a * b
static double Multiply(double a, double b);

// Returns a / b
// Throws DivideByZeroException if b is 0
static double Divide(double a, double b);
};
}


③ 新しいクラスのソース ファイルを作成するには、[プロジェクト] メニューの [新しい項目の追加] をクリックします。[新しい項目の追加] ダイアログ ボックスが表示されます。カテゴリ ペインで、[Visual C++] の [コード] をクリックします。テンプレート ペインの [C++ ファイル (.cpp)] をクリックします。ソース ファイルとして「MathFuncsLib.cpp」などの名前を付け、[追加] をクリックします。空白のファイルが表示されます。



image



④ ソース ファイルに MyMathFuncs の機能を実装します。コードは次のようになります。



// MathFuncsLib.cpp
// compile with: /c /EHsc
// post-build command: lib MathFuncsLib.obj

#include "MathFuncsLib.h"

#include <stdexcept>

using namespace std;

namespace MathFuncs
{
double MyMathFuncs::Add(double a, double b)
{
return a + b;
}

double MyMathFuncs::Subtract(double a, double b)
{
return a - b;
}

double MyMathFuncs::Multiply(double a, double b)
{
return a * b;
}

double MyMathFuncs::Divide(double a, double b)
{
if (b == 0)
{
throw new invalid_argument("b cannot be zero!");
}

return a / b;
}
}


⑤ プロジェクトをスタティック ライブラリにビルドするには、[プロジェクト] メニューの MathFuncsLib Properties… をクリックします。左ペインで、[構成プロパティ] の下の [全般] をクリックします。右ペインで、[構成の種類] を [スタティック ライブラリ (.lib)] に変更します。[OK] をクリックして、変更を保存します。



image



⑥ [ビルド] メニューの [ソリューションのビルド] をクリックし、スタティック ライブラリをコンパイルします。これにより、他のプログラムで使用できるスタティック ライブラリが作成されます。



3. このスタティックライブラリを参照するアプリケーションを作成する



① 作成したスタティック ライブラリを参照して使用するアプリケーションを作成するには、[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。



② プロジェクトの種類ペインで、[Visual C++] の [win32] をクリックします。



③ テンプレート ペインの [Win32 コンソール アプリケーション] をクリックします。



④ プロジェクトとして「MyExecRefsLib」などの名前を付け、[プロジェクト名] フィールドに入力します。[ソリューション] の横のドロップダウン リストで、[ソリューションに追加] をクリックします。これにより、スタティック ライブラリと同じソリューションに新しいプロジェクトが追加されます。



image



⑤ [OK] をクリックして、Win32 アプリケーション ウィザードを起動します。[Win32 アプリケーション ウィザード] ダイアログ ボックスの [概要] ページで、[次へ] をクリックします。



⑥ Win32 アプリケーション ウィザードの [アプリケーションの設定] ページで、[アプリケーションの種類] の [コンソール アプリケーション] を選択します。



⑦ Win32 アプリケーション ウィザードの [アプリケーションの設定] ページで、[追加のオプション] の下にある [プリコンパイル済みヘッダー] の選択を解除します。



image image



⑧ [完了] をクリックして、プロジェクトを作成します。



4. アプリケーションからスタティックライブラリのを使用するには



① 新しいコンソール アプリケーションを作成すると、空のプログラムが作成されます。ソース ファイルの名前は、前の処理でプロジェクトに付けた名前と同じになります。この例では、「MyExecRefsLib.cpp」という名前です。



② スタティック ライブラリで作成された数値演算ルーチンを使用するには、それを参照する必要があります。このためには、[プロジェクト] メニューの [参照] をクリックします。[プロパティ ページ] ダイアログ ボックスで、[共通プロパティ] ノードを展開し、[参照設定] をクリックします。次に、[新しい参照の追加] ボタンをクリックします。[参照] ダイアログ ボックスの詳細については、「[参照設定] ([<プロジェクト名> プロパティ ページ] ダイアログ ボックス - [共通プロパティ])」を参照してください。



image



③ [参照の追加] ダイアログ ボックスが表示されます。このダイアログ ボックスには、参照できるすべてのライブラリが表示されます。[プロジェクト] タブでは、現在のソリューション内のすべてのプロジェクト、およびそれらに含まれるすべてのライブラリが表示されます。[プロジェクト] タブで、MathFuncsLib をクリックします。次に [OK] をクリックします。[参照の追加] ダイアログ ボックスの詳細については、「[参照の追加] ダイアログ ボックス」を参照してください。



image



④ スタティック ライブラリのヘッダー ファイルを参照するには、インクルード ディレクトリ パスを変更する必要があります。このためには、[プロパティ ページ] ダイアログ ボックスで、[構成プロパティ] ノードを展開し、次に [C/C++] ノードを展開して、[全般] をクリックします。[追加のインクルード ディレクトリ] の横に、MathFuncsLib.h ヘッダー ファイルへのパスを入力します。



image



⑤ これで、MyMathFuncs クラスをこのアプリケーションで使用できます。MyExecRefsLib.cpp の内容を次のコードに置き換えます。



// MyExecRefsLib.cpp
// compile with: /EHsc /link MathFuncsLib.lib

#include <iostream>

#include "MathFuncsLib.h"

using namespace std;

int main()
{
double a = 7.4;
int b = 99;

cout << "a + b = " <<
MathFuncs::MyMathFuncs::Add(a, b) << endl;
cout << "a - b = " <<
MathFuncs::MyMathFuncs::Subtract(a, b) << endl;
cout << "a * b = " <<
MathFuncs::MyMathFuncs::Multiply(a, b) << endl;
cout << "a / b = " <<
MathFuncs::MyMathFuncs::Divide(a, b) << endl;

return 0;
}


5. アプリケーションの実行



MyExecRefsLib が既定のプロジェクトとして選択されていることを確認します。ソリューション エクスプローラで [MyExecRefsLib] を選択し、次に [プロジェクト] メニューの [スタートアップ プロジェクトに設定] を選択します。



image



② プロジェクトを実行するには、[デバッグ] メニューの [デバッグなしで開始] を選択します。出力は、次のようになります。



image


ライブラリの基礎 [開発環境]

Linux ライブラリの3類

スタティックライブラリは、コンパイル時にコードがプログラムに組込まれます。 モジュールサイズが大きくなりますが、別のマシンにバイナリで配布したときに そのライブラリがなくても動作します。 .a で終わるファイルです。


共有ライブラリは、プログラムの実行時にロードされます。マシンによっては、 その共有ライブラリがなかったり、バージョンが違ったりして、動作しないことがあります。 .so と .sa で終わるファイルです。.sa は、古い a.out 形式で使われた共有ライブラリです。


ダイナミックライブラリは、共有ライブラリの1種です。実行時に 関数を使って ロードしたり、アンロードしたりできます。

ライブラリ化の勧め

殆ど変更しなくなってきたクラスについては「ライブラリ化」をしてすっきり整理することをお勧めします。

ライブラリの基本については、以下が参考になります。

http://marupeke296.com/DXCLS_MakeStaticLib.html

http://www.glamenv-septzen.net/nifty/others/computer/linux_ldd01.html

ライブラリの作成方法については、以下が参考になります。

http://msdn.microsoft.com/ja-jp/library/ms235627(v=vs.90).aspx

http://www.ncad.co.jp/~komata/c-kouza26.htm

http://www.geocities.jp/ky_webid/win32c/056.html


食事ワンポイント[12] [健康]

7.スポーツ選手のための栄養プログラム(4)
~プログラムの実例~

プログラムの実例を示します。

●ケース1
女性フィットネス・インストラクター(35歳)

[プログラム開始時の状況]

6カ月後のコンテストを控え、本人は減量を最大の課題としていました。食事の内容と食習慣、体脂肪率と組織量のチェックと血液検査を行った結果、カロリーのとりすぎを気にするあまり炭水化物の量が少なすぎ、明らかなビタミン、ミネラルの欠乏が認められ、鉄欠乏性貧血の状態でした。
また、本人が常に疲労・倦怠感、腰と膝の痛みを訴えており、爪のもろさにも悩まされていました。
そのためコンディションの維持・向上を基本方針に、食生活の改善とサプリメントの投与により問題解決を図ることにしました。

[具体的プログラム]

     1.摂取カロリー制限
       開始~2カ月目:2,000 kcal
          3カ月目:1,800 kcal
          4カ月目:1,600 kcal
          5カ月目:1,500 kcal
             6カ月目:1,200 kcal
     2.PFC比(たんぱく質:脂肪:炭水化物)
       開始~3カ月目:20%:20%:60%
         4~6カ月目:25%:10%:65%
     3.高単位サプリメント投与
       ウーマンズ・チョイス       1パック (夕食後)
       B-50コンプレックス      1錠    (朝食後)
       C-1000コンプレックス    1錠    (朝食後)
       Eー400 IU         1錠   (朝食後)
       オイスターシェル・カルシウム   1錠   (朝食後)
       プロテインプラス         1錠   (毎食後)

[結果]

減量に関しては組織量を維持したまま体脂肪だけを落とすことに成功しました。摂取カロリーは減らしながらもビタミン、ミネラルを確保することで、6カ月間を通じてトレーニングのマックス値は上昇を続けました。

腰と膝の痛みに対しては、組織を強化し、酸化を防ぐことで細胞の老化を防ぐといわれているビタミンCとEを通常の2倍投与した結果、痛みは大幅に緩和されました。また、ビタミン、ミネラルの投与により爪のもろさも解消しました。

疲労・倦怠感については自覚症状の面でかなり改善され、発汗量、尿の量、回数が増えたことから代謝がアップしたことも明らかで、全身状態が良くなったものといえます。これは、血液検査結果で鉄の欠乏状態が解消され、肝機能、腎機能が激しいトレーニングや低カロリー食にも関わらず改善されたことからも裏づけられています。

 

 
高単位サプリメントについては後述する。


恩讐の彼方に [読書]

恩讐の彼方に・忠直卿行状記 他八篇 (岩波文庫)

恩讐の彼方に・忠直卿行状記 他八篇 (岩波文庫)

  • 作者: 菊池 寛
  • 出版社/メーカー: 岩波書店
  • 発売日: 1970/12
  • メディア: 文庫
 
大正8年(1919年)1月に発表された菊池寛の短編小説。
主人公の市九郎は、主人である中川の愛人と密通していたことがバレて手打ちになりそうとなる。しかし逆に主人を殺してしまい逃げ出す事になる。
その後、市九郎と一緒に逃げたお弓とともに峠の茶屋を始めるが、実は茶屋に寄った客の懐具合をみて、金持ちならば殺し、その金品を盗む生活を送っていた。ある時そんな生活とお弓に嫌気がさし市九郎は逃げ出す。
その後、後悔の念から出家し旅にでる。難所の岩場を通過する時、事故で亡くなった人を見、懺悔のために、その岩を掘削してトンネルを掘る決心をする。
その後、掘削を始めて19年、敵討ちのために旅に出た中川の息子が、とうとう市九郎を見つけ殺そうとする。素直に殺されようとする市九郎であったが、石工たちはこれを止め、トンネルが開通するまで待つこととなる。
さらに1年6ヶ月が過ぎ去り、とうとうトンネルは開通した。そして殺されようとする市九郎であったが、この時既に、トンネル堀工の仲間となっていた中川の息子は、殺す意思は無くなっており、トンネルが完成した事に一緒に感動し涙を流すのみであった。
前半は、市九郎の残忍さが強調され、ヒドい人間として描かれる。
しかし、無心にトンネル掘削を行う彼の姿から応援する気持ちが芽生えてくる。そんな気持ちを代弁するかのように村人達の気持ちを描いている。そしてトンネル完成を共に喜び涙する気持ちに同調できるようになった
 

タイヨウのうた [映画]

タイヨウのうた×YUIと薫のうた [DVD]

タイヨウのうた×YUIと薫のうた [DVD]

  • 出版社/メーカー: TCエンタテインメント
  • メディア: DVD
 
今日「タイヨウのうた」を見ました。
「色素性乾皮症」に侵された14才の少女の恋と病気を克服して行く物語。。。この病気にかかると太陽光にあたると死んでしまう病気。
自分が侵されている病気のことは十分知りながら、よりより人生を過ごす方法に関して提案しています。 

主演女優「YUI」とヒーローを演じた「塚本高史」の青春物語、とても良い恋愛映画でした。
 
 

勇者ヨシヒコと魔王の城 [エンターテイメント]

勇者ヨシヒコと魔王の城.png
 
Huluで見つけたこのTVプログラム、時々テレビで見てあまりのくだらなさが面白くて機会があれば全編見たいと思ってました。
 
毎回出演している有名ゲストの演技も面白かったけど、いつもは真面目な出演者達のくだらない演技は素晴らしいです。
そしてドラクエに出てくる怪物達のハリボテと音楽のチープさ。。。「予算のない冒険活劇」とうたっているだけあってどれも笑ってしまいます。
主演「山田孝之」のトボケたキャラクターが面白いですが、女優「木南晴夏」の強い女性とブリッコ演技が魅力的です。
あと「宅麻伸」と「ムロツヨシ」の演技も忘れられません。 
 
全12話、なんと2回見てしまいました。続編に期待です。 
 

食事ワンポイント[11] [健康]

6.スポーツ選手のための栄養プログラム(3-6

~プログラム実施の柱~ 

 

4.ビタミン、ミネラルをとる

スポーツ選手のエネルギー代謝は一般人のそれと比較して非常に大きく、特に瞬発力を必要とする競技では、その最大の力を発揮している時にエネルギー代謝に関わるビタミン、ミネラルがどれほど消費されているかを知ることはできません。


ビタミンB群は糖質、脂質、たんぱく質の代謝に補酵素として関わっています。また、神経の働きとも大きく関わっていることからも、特にスポーツ選手には欠くことのできないビタミンといえます。常に疲労感、倦怠感がつきまとう選手にビタミンB群のサプリメントを投与すると、その症状は改善されます。また、発汗量が増え、尿の回数が増えるという人もいます。


酸素摂取量の多いスポーツマンにとって細胞の酸化、つまり組織の老化の原因となる活性酸素の害を打ち消すビタミンA、C、Eは注目に値します。それぞれが運動能力のアップ、体の組織の強化、免疫力の強化といった報告が数多く出されている中で、こうした脂溶性のビタミンをサプリメントの形で摂取することが必要です。

丈夫な骨を保つためにはカルシウムが必要なことはいうまでもありません。カルシウムが不足すると、骨からカルシウムが溶けだし、溶けだしたカルシウムは関節に沈殿し、関節炎を引き起こし、また、カルシウム不足は筋肉のけいれんの原因にもなります。


たんぱく質のとりすぎもカルシウムを骨から溶けださせます。骨からカルシウムが溶けださないようにし、常につくりかえられている骨を丈夫に保つするためには、単独では非常に吸収されにくいカルシウムをリン、マグネシウムとのバランスをとって確実に補給することが必要です。 

 

吉田先生のコラムより抜粋

 

疲労回復をうたっているドリンクや総合ビタミンにはビタミンB群が主に入ってますね。

激しい運動をした晩にこれらのビタミンを取ると、次の日の朝の疲労感の残り方がぜんぜん違ってきます。

 

あとカルシウムの大切さは、このコラムを読んでから知りました。カルシウムは育ち盛りの子供のころに必要と思ってました。さらにスポーツ選手にはタンパク質のほうが重要と考えていたのでタンパク質は積極的に取ってませんでした。

まあ牛乳を飲むとお腹が痛くなって下痢してたので、あえて取ろうとは思いませんでした。 

いまは毎晩飲んでますが、不思議なことに、お腹が痛くなる事は無くなってました?

 

 


iPad mini 届きました [ガジェット]

2012-12-15 10.08.31.JPG

iPad mini 届きました。

納入予定は2週間後の21日でしたが、1週間早く昨日届きました。

今回注文したのは以下の3つで、Apple Store で購入したので刻印入としました。

 

  • iPad mini Wi-Fi 16GB - ホワイト&シルバー(刻印入り)
  • SoftBank Wi-Fi スポット(2年間)(無料)
  • Pad mini Smart Cover - ダークグレー

 

2012-12-15 10.10.03.JPG

本体です。奇麗ですね。

2012-12-15 10.11.47.JPG 

付属品です。あっさりしてます。

2012-12-15 20.52.59.JPG 

各種設定が終了して、Smart Coverを装着ところです。

kokuin.jpg 

刻印は、いつもそうありたいとの思いから、マザーテレサの言葉を使わせて頂きました。

mother.png

Peace begins with a smile.「幸せは笑顔から始まる。」

それと自分の名前を刻印しました。 

使用感については、使い始めたばかりですが、快適に使えています。

iPadを購入した目的の一つに、iOS用の豊富なアプリを使いたかったためなので、これからいろいろと楽しみです。

あと「SoftBank Wi-Fi」については、登録用のサイトにアクセスできなくて、ずいぶん悩みました。

携帯電話もしくは、スマホ(3G経由のみ)のみでアクセス可能とあったので、docomoスマホのwifiを停止してアクセスしましたがダメでした。

ウェブで検索したところ、softbank以外のスマホではアクセスできない様子です!

結局ソフトバンクモバイルに電話して確認する事にしました。AppleからのメールにiPadが届いてから5日後から登録するように書いてあったので、来週末にでも電話してみます。

他社スマホからのアクセスを制限する対応には疑問を感じますね。。。

 


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。