ホームページ >バックエンド開発 >C++ >C++ 静的関数は非静的メンバー関数にアクセスできますか?

C++ 静的関数は非静的メンバー関数にアクセスできますか?

WBOY
WBOYオリジナル
2024-04-17 10:24:02992ブラウズ

C では、静的関数は非静的メンバー関数に直接アクセスできません。解決策には次のものが含まれます。 1. オブジェクト ポインターを介したアクセス 2. クラス スコープ演算子を介したアクセス。

C++ 静态函数可以访问非静态成员函数吗?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。