クラス内のconst関数および非const関数の呼び出し規則

2784 ワード

class Student

{

public:

    int getAge()

    {

        return m_age;

    }



    int getAge() const

    {

        return m_age;

    }



    void setAge(int age)

    {

        m_age = age;

    }



    void setAge(int age) const

    {

        // , const

        //m_age = age;

    }



public:

    int m_age;

};

 
周知のように、同じパラメータと同じ名前の場合、constは関数の再ロードを構成することができるが、constメンバー関数は非静的メンバー変数を変更することはできない.
クラス内の2つの関数が存在する場合:
constオブジェクトはconstメンバー関数をデフォルトで呼び出し、非constオブジェクトは非constメンバー関数をデフォルトで呼び出します.
constオブジェクト以外でconstメンバー関数を呼び出すには、(const Studio&)objなどの明示的な変換が必要です.getAge();
constオブジェクトがconst以外のメンバー関数を呼び出す場合は、const_と同じです.cast(constObj).getAge();(注意:constObjは括弧を付ける)
クラスに1つの関数しか存在しない場合:
非constオブジェクトはconstメンバー関数または非constメンバー関数を呼び出すことができます.
constオブジェクトはconstメンバー関数のみを呼び出すことができ、非const関数を直接呼び出すとコンパイラがエラーを報告します.
 
Teacherが先生を代表して教えてくれた学生がいたら、次のような学生を獲得します.
const Student getFirstStudent();

次のような場合があります.
//   

teacher.getFirstStudent().m_age = 15;

//

Student student = teacher.getFirstStudent();

student.m_age = 15;

teacherだgetFirstStudio()が返すconstオブジェクトは、メンバーを直接変更することはできません.
ただし、付与後にレプリケーションコンストラクション関数を呼び出し、生成されたstudentは新しいオブジェクトであり、返されるconstとは関係ないので変更できます.