1. const类实例不能调用非const的成员函数,编译器出错。
#include <iostream>
#include <string>
using namespace std;
class student
{
public:
student(int id, const string& name) : m_id(id), m_name(name)
{
// do nothing
}
int get_id()
{
return m_id;
}
private:
int m_id;
string m_name;
};
int main()
{
student stu1(1, "zhangshan");
const student stu2(2, "lisi");
cout << "stu1's id:" << stu1.get_id() << endl;
cout << "stu2's id:" << stu2.get_id() << endl;
return 0;
}
[root@CNC_BJ_010_235 xxx]# g++ test_const.cpp -o test_const
test_const.cpp: In function ‘int main()’:
test_const.cpp:29: error: passing ‘const student’ as ‘this’ argument of ‘int student::get_id()’ discards qualifiers
2. 非const类实例可以调用const的类成员函数。
#include <iostream>
#include <string>
using namespace std;
class student
{
public:
student(int id, const string& name) : m_id(id), m_name(name)
{
// do nothing
}
int get_id() const
{
return m_id;
}
private:
int m_id;
string m_name;
};
int main()
{
student stu1(1, "zhangshan");
const student stu2(2, "lisi");
cout << "stu1's id:" << stu1.get_id() << endl;
cout << "stu2's id:" << stu2.get_id() << endl;
return 0;
}
[root@CNC_BJ_010_235 xxx]# ./test_const
stu1's id:1
stu2's id:2
3. const会导致类成员函数重载。
#include <iostream>
#include <string>
using namespace std;
class student
{
public:
student(int id, const string& name) : m_id(id), m_name(name)
{
// do nothing
}
int get_id() const
{
return m_id;
}
int get_id()
{
return m_id * (-1);
}
private:
int m_id;
string m_name;
};
int main()
{
student stu1(1, "zhangshan");
const student stu2(2, "lisi");
cout << "stu1's id:" << stu1.get_id() << endl;
cout << "stu2's id:" << stu2.get_id() << endl;
return 0;
}
[root@CNC_BJ_010_235 xxx]# ./test_const
stu1's id:-1
stu2's id:2