クラス内の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
クラスに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とは関係ないので変更できます.