C ++调用具有相同签名但范围不同的方法
这个问题在这里已经有了答案:
函数可以根据它们的const
单独重载。 这是C ++的一个重要特性。
// const member function:
const XMLAttribute* FindAttribute( const char* name ) const;
// non-const member function
XMLAttribute* FindAttribute( const char* name );
在这种情况下, const
,使功能不同的是const
以下括号。 括号之前的const
不属于方法签名,而括号后面的const
却是。 后者的const
用法指定哪些成员函数可以从const
对象中调用,哪些不可以。 换句话说,它指定了const
对象的约定。
如果你有一个const
对象, const
方法将被调用:
const MyObject cObj;
cObj.FindAttribute("cats");
// const method will be called
如果你有一个非const
对象,编译器会寻找一个非const
方法并调用它。 如果它不存在,它会查找一个const
方法并调用它。 编译器以这种方式工作,因为它是合法的调用const
从非成员函数const
对象,但它是非法的调用非const
从成员函数const
对象。
MyObject obj;
obj.FindAttribute("cats");
// non-const method will be called
// if it does not exist the compiler will look for a const version
我对如何在公共和私人范围内具有相同的签名感到困惑。
他们实际上没有相同的签名
const XMLAttribute* FindAttribute( const char* name ) const;
// ^^^^^^
公共方法适用于const
对包含类的访问。 这是计数函数签名的唯一性。
上一篇: C++ Calling methods with same signature but different scope