/* const函数总结(author:mingyuanonline#gmail.com)
* 声明const成员函数,只需在函数参数表和函数体之间加const关键字即可(此句有改动,原始版本见原作者博客)
* 注意,我们只能对类成员函数这么做,对普通全局函数不能这么做。
* 仅当某个函数是类成员时,将其声明为const才有意义,其作用是使该函数中的this指针成为const,
* 这意味着我们不能在该函数的定义内在赋值语句左边写上类的数据成员——那将被编译器标记为错误。
* const成员函数不能调用同类的非const成员函数,因为那样也有可能修改当前对象。
* 当我们将某个对象声明为const之后,该对象可以调用的成员函数也都必须是const,否则程序将不能编译。
* 注:以上参考http://blog.csdn.net/lidh04/archive/2008/07/27/2720309.aspx
*
* 总结一下即:
* 0.声明const成员函数,只需在函数参数表和函数体之间加const关键字即可
* 1.const函数声明只在类中有意义只能出现在类中,作为类的成员函数
* 2.const成员函数函数只能调用const成员函数
* 3.非const函数可以调用const成员函数
* 4.非const对象可以调用const成员函数
* 5.const对象只能调用const成员函数
* 6.const对象可以访问静态成员函数
*/
#include
#include
using namespace std;
class class_const_member_function
{
public:
class_const_member_function(string name="no name"):_name(name){};
string display(){return _name;}//非const成员函数
void display_const(string name)const{cout< < //void const_try_to_modify_member_variable()const{_name="99";}//const成员函数试图修改成员变量,出错!
void const_call_const()const{display_const("const_call_const");}//const成员函数调用const成员函数
//void const_call_nono_const_function()const{display();}//const函数调用非const,出错!
void nono_const_call_const(){display_const("nono_const_call_const");}//非const成员函数调用const成员函数
static void print(string whos){cout< <<"'s "<<_school<
private:
string _name;
static string _school;
};
string class_const_member_function::_school("school");
void const_member_function_test()
{
class_const_member_function mem;//声明一个非const对象
cout< < mem.display_const("name");//非const对象调用const成员函数
mem.print("mem");
const class_const_member_function const_mem;//声明一个const对象
const_mem.display_const("const_name");//const对象调用const成员函数
//const_mem.display();//const对象调用非const成员函数,出错!
const_mem.print("const_mem");//const对象访问静态成员函数
class_const_member_function::print("class");//类名调用静态函数
}
* 声明const成员函数,只需在函数参数表和函数体之间加const关键字即可(此句有改动,原始版本见原作者博客)
* 注意,我们只能对类成员函数这么做,对普通全局函数不能这么做。
* 仅当某个函数是类成员时,将其声明为const才有意义,其作用是使该函数中的this指针成为const,
* 这意味着我们不能在该函数的定义内在赋值语句左边写上类的数据成员——那将被编译器标记为错误。
* const成员函数不能调用同类的非const成员函数,因为那样也有可能修改当前对象。
* 当我们将某个对象声明为const之后,该对象可以调用的成员函数也都必须是const,否则程序将不能编译。
* 注:以上参考http://blog.csdn.net/lidh04/archive/2008/07/27/2720309.aspx
*
* 总结一下即:
* 0.声明const成员函数,只需在函数参数表和函数体之间加const关键字即可
* 1.const函数声明只在类中有意义只能出现在类中,作为类的成员函数
* 2.const成员函数函数只能调用const成员函数
* 3.非const函数可以调用const成员函数
* 4.非const对象可以调用const成员函数
* 5.const对象只能调用const成员函数
* 6.const对象可以访问静态成员函数
*/
#include
#include
using namespace std;
class class_const_member_function
{
public:
class_const_member_function(string name="no name"):_name(name){};
string display(){return _name;}//非const成员函数
void display_const(string name)const{cout< < //void const_try_to_modify_member_variable()const{_name="99";}//const成员函数试图修改成员变量,出错!
void const_call_const()const{display_const("const_call_const");}//const成员函数调用const成员函数
//void const_call_nono_const_function()const{display();}//const函数调用非const,出错!
void nono_const_call_const(){display_const("nono_const_call_const");}//非const成员函数调用const成员函数
static void print(string whos){cout< <<"'s "<<_school<
private:
string _name;
static string _school;
};
string class_const_member_function::_school("school");
void const_member_function_test()
{
class_const_member_function mem;//声明一个非const对象
cout< < mem.display_const("name");//非const对象调用const成员函数
mem.print("mem");
const class_const_member_function const_mem;//声明一个const对象
const_mem.display_const("const_name");//const对象调用const成员函数
//const_mem.display();//const对象调用非const成员函数,出错!
const_mem.print("const_mem");//const对象访问静态成员函数
class_const_member_function::print("class");//类名调用静态函数
}