C では、静的関数は非静的メンバー関数に直接アクセスできません。解決策には次のものが含まれます。 1. オブジェクト ポインターを介したアクセス 2. クラス スコープ演算子を介したアクセス。
C の静的関数は非静的メンバー関数にアクセスします
C では、静的関数は特別なメンバー関数です。クラス内の特定のオブジェクトには関連付けられていません。これは、静的関数が非静的メンバー関数 (通常のメンバー関数) に直接アクセスできないことを意味します。
ただし、この制限は次の 2 つの方法で解決できます。
1. オブジェクト ポインターを介したアクセス:
現在のクラス ポインターを取得し、そのポインターを使用して非静的メンバー関数にアクセスします。例:
class MyClass { public: static void staticFunction() { MyClass* obj = new MyClass(); obj->nonStaticFunction(); delete obj; } void nonStaticFunction() { // ... } };
2。クラス スコープを介したアクセス:
非静的メンバー関数が public
の場合、次のようにアクセスできます。アクセス用のクラス スコープ演算子 (::
)。例:
class MyClass { public: static void staticFunction() { MyClass::nonStaticFunction(); } static void nonStaticFunction() { // ... } };
実際のケース:
メンバー関数 getGrade()# を含む
Student クラスがあるとします。 # # および静的関数
printGrade()。
printGrade() 生徒の成績を印刷するには、
getGrade() へのアクセスが必要です。
class Student { public: int grade; void getGrade() { // 获取学生的成绩 } static void printGrade(Student* student) { student->getGrade(); // 通过对象指针访问非静态成员函数 } static void printGrade() { Student student; student.getGrade(); // 通过类作用域访问非静态成员函数 } };この場合、
printGrade() にはオブジェクト ポインターを通じてアクセスでき、
getGrade() にはクラス スコープを通じてアクセスできます。
以上がC++ 静的関数は非静的メンバー関数にアクセスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。