一般に、C 静的関数は非静的データ メンバーにアクセスできませんが、次の例外を介して間接的にアクセスできます。 非静的メンバーへのポインター: 静的関数は非静的データ メンバーへのポインターを持つことができます。非静的メンバー参照を受け入れるパラメーター: 静的関数は、非 const メンバー参照をパラメーターとして受け入れることができます。
#C の静的関数が非静的データ メンバーにアクセスできるかどうか
はじめに
# # C の静的関数は、クラスに関連付けられている関数ですが、クラス内の特定のオブジェクトには関連付けられていません。これらは、特定のオブジェクトの状態に依存しない補助操作を実装するためによく使用されます。非静的データ メンバーは、オブジェクトごとに値が異なるクラス関連の変数です。一般規則
通常、静的関数は非静的データ メンバーに直接アクセスできません。これは、静的関数がクラス内の特定のオブジェクトのインスタンスに関連付けられていないためです。 #例外: ポインターと参照ただし、静的関数が非静的データ メンバーに間接的にアクセスできるようにする例外が 2 つあります。
次に、ポインターを使用して静的関数が非静的データ メンバーにアクセスできるようにする方法を示す実践的なケースを示します。
#include <iostream> class MyClass { public: int nonStaticData; static void printNonStaticData(MyClass* obj) { std::cout << "Non-static data: " << obj->nonStaticData << std::endl; } }; int main() { MyClass object; object.nonStaticData = 42; MyClass::printNonStaticData(&object); // 调用静态函数 return 0; }この例では、静的関数
printNonStaticData
は、パラメーターとして渡されたポインターを介して非静的データ メンバーnonStaticData にアクセスします。
注:
メンバー ポインターまたはメンバー参照を使用して非静的データ メンバーにアクセスする場合は、これらのメンバーが静的関数内で変更されていないことを確認する必要があります。静的関数は、オブジェクトに依存しない性質に違反するため、特定のオブジェクトに属するメンバーを変更してはなりません。
以上がC++ 静的関数は非静的データ メンバーにアクセスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。