C++クラスのインラインメンバー関数はどこに置くべきですか
2220 ワード
今日C++Primerを復習したとき、C++クラスのインラインメンバー関数の配置について、ヘッダファイルに置くべきだと見ました.では、これはいったいなぜですか.
どうですか.コード仕様の問題なのか、それともそうしなければならないのか.
次に私自身の理解についてお話ししましょう.この問題を徹底的に理解するには、まず関数の宣言と定義を理解しなければならない.関数は
複数の場所で宣言されますが、1つの場所でしか定義できません.そうしないと、再定義が発生します.ほとんどの関数のデフォルトは外部リンクであり、inline関数のデフォルトは内部チェーンです.
つなぎます.つまりinline関数はこのファイルでしか使用できず、他のファイルには表示されません.通常、あるクラスを使用するときは、ファイルに追加します.
クラスのヘッダファイルを開き、クラスのインタフェースを使用できるようにします.私たちのクラスのメンバー関数の実現はすべて対応しています.cppファイルのh
ファイルに宣言されます.これで私たちは通過できます.hファイルのメンバー関数の宣言は定義を見つけ、メンバー関数を使用します.ただしinline関数を
置くcppファイルでは、そのペアのみが正しい.cppファイルは有効で、アクセスできません.クラスの宣言のヘッダファイルに配置します
サンプルは、ヘッダファイルを含めることで使用します.
次に、実際の例を書いて説明します.まず、クラス宣言のヘッダファイルにインライン関数を配置します.
実行結果は正常です.次に、インライン関数を配置します.cpp中去:
関数と上のmainをテストします.cppは同じです.エラーが発生しました.
error LNK 209:解析不能外部符号「public:void__thiscalltest::print(void)」(?print@test@@QaEXXZ)という記号が書かれています.
数_mainで参照されます.テスト関数を次のように変更します.
では、動作結果は正常です.これから結論を出すことができる:インライン関数はヘッダファイルまたは.cppでは間違いありませんが、プログラムで訪問する必要がある場合は
それを聞くと、ヘッダファイルに入れなければなりません.
転載先:
C++クラスのインラインメンバー関数はどこに置くべきですか.
どうですか.コード仕様の問題なのか、それともそうしなければならないのか.
次に私自身の理解についてお話ししましょう.この問題を徹底的に理解するには、まず関数の宣言と定義を理解しなければならない.関数は
複数の場所で宣言されますが、1つの場所でしか定義できません.そうしないと、再定義が発生します.ほとんどの関数のデフォルトは外部リンクであり、inline関数のデフォルトは内部チェーンです.
つなぎます.つまりinline関数はこのファイルでしか使用できず、他のファイルには表示されません.通常、あるクラスを使用するときは、ファイルに追加します.
クラスのヘッダファイルを開き、クラスのインタフェースを使用できるようにします.私たちのクラスのメンバー関数の実現はすべて対応しています.cppファイルのh
ファイルに宣言されます.これで私たちは通過できます.hファイルのメンバー関数の宣言は定義を見つけ、メンバー関数を使用します.ただしinline関数を
置くcppファイルでは、そのペアのみが正しい.cppファイルは有効で、アクセスできません.クラスの宣言のヘッダファイルに配置します
サンプルは、ヘッダファイルを含めることで使用します.
次に、実際の例を書いて説明します.まず、クラス宣言のヘッダファイルにインライン関数を配置します.
/*test.h*/
#ifndef TEST_H
#define TEST_H
#include <iostream>
using std::cout;
using std::endl;
class test
{
public:
test():x(10){}
inline void print();
void display (int y);
private:
int x;
};
void test::print()
{
cout << x << endl;
}
#endif
/*test.cpp*/
#include <iostream>
#include "test.h"
using std::cout;
using std::endl;
void test::display(int y)
{
cout << x * y << endl;
}
実行結果は正常です.次に、インライン関数を配置します.cpp中去:
/*test.h*/
#ifndef TEST_H
#define TEST_H
#include <iostream>
using std::cout;
using std::endl;
class test
{
public:
test():x(10){}
inline void print();
void display (int y);
private:
int x;
};
#endif
/*test.cpp*/
#include <iostream>
#include "test.h"
using std::cout;
using std::endl;
void test::print()
{
cout << x << endl;
}
void test::display(int y)
{
cout << x * y << endl;
}
関数と上のmainをテストします.cppは同じです.エラーが発生しました.
error LNK 209:解析不能外部符号「public:void__thiscalltest::print(void)」(?print@test@@QaEXXZ)という記号が書かれています.
数_mainで参照されます.テスト関数を次のように変更します.
int main()
{
test T;
T.display(10);
//T.print();
system("pause");
return 0;
}
では、動作結果は正常です.これから結論を出すことができる:インライン関数はヘッダファイルまたは.cppでは間違いありませんが、プログラムで訪問する必要がある場合は
それを聞くと、ヘッダファイルに入れなければなりません.
転載先:
C++クラスのインラインメンバー関数はどこに置くべきですか.