メンバ関数のインライン化

クラスのメンバ関数をインライン化すると実行時のコストを軽減できコードを綺麗にすることができます。



■インライン化の書式
<書式1>
クラスのメンバ関数 { 関数内部の式;}





<書式2>
inline データ型 クラス名::メンバ関数
{
    関数内部の式
      ・
      ・
}

<インライン化の極意>
インラインにするには本当にび出しコストが問題になるような小さいものに限定するべし


■インライン化しても意味がない場合
・関数内容があまりにも大きい場合
・再帰的な呼び出しを行う場合
・関数内部でループや条件分布がある場合(一部例外を除く)

■前回のクラスのメンバ関数をインライン化した例

#include <iostream.h>
#include <string.h>

class Test
{
private:
 char *Name;
protected: 
 void ChangeName(const char *buf){strcpy(Name,buf);}
public:
 Test(char *buf){Name=new char[100], strcpy(Name,buf);}
 ~Test(){delete(Name);}
 void ShowName() {cout<<"現在の登録名は"<<"\""<<Name<<"\"です。"<<endl;}
 void ChangeNameEx(const char *buf){ChangeName(buf);}

};

void main(void)
{
 char str[100] ;
 Test MyClass("デニス・リッチー");

 MyClass.ShowName();
 cout<<"名前を変更します。あなたの名前を入力してください。"<<endl;
 cin>>&str[0];
 cout<<"名前を変更しましたので表示します。"<<endl;
 MyClass.ChangeNameEx(&str[0]);
 MyClass.ShowName();
 char buf;
 cout<<"何か入力してください"<<endl;
 cin>>buf;
}

※名前を「ABCDEF」に変更した場合は「ABCDEF」と表示される。

■上記のクラスのメンバ関数ShowNameをDelphiのProperty風にした例(こちらの使い方の方が頻繁に使用されます。)

#include <iostream.h>
#include <string.h>

class Test
{
private:
 char *Name;
protected:
 void ChangeName(const char *buf){strcpy(Name,buf);}
public:
 Test(char *buf){Name=new char[100], strcpy(Name,buf);}
 ~Test(){delete(Name);}
 char *ShowName() {return Name;}
 void ChangeNameEx(const char *buf){ChangeName(buf);}
};

void main(void)
{
 char str[100] ;
 Test MyClass("デニス・リッチー");

 cout<<"現在の登録名は"<<"\""<<MyClass.ShowName()<<"\"です。"<<endl;
 cout<<"名前を変更します。あなたの名前を入力してください。"<<endl;
 cin>>&str[0];
 cout<<"名前を変更しましたので表示します。"<<endl;
 MyClass.ChangeNameEx(&str[0]);
 cout<<"現在の登録名は"<<"\""<<MyClass.ShowName()<<"\"です。"<<endl;
 char buf;
 cout<<"何か入力してください"<<endl;
 cin>>buf;
}

※名前を「ABCDEF」に変更した場合は「ABCDEF」と表示される。




C++の基礎のページへ



ホーム PV ランキング