在同一个类/结构中具有相同签名的相同功能?超载?

时间:2014-04-07 12:39:05

标签: c++ function class boost member

我在boost示例中看到了一个用于构造状态机的代码部分。令我困惑的是两个成员函数ElapsedTime()?是否允许这两个函数具有相同的签名,例如函数名和参数类型?

我已经google了很多但没有任何运气可以找到相关信息。对此有任何建议将不胜感激。

struct Active : sc::simple_state< Active, StopWatch, Stopped >
{
public:
    typedef sc::transition< EvReset, Active > reactions;

    Active() : elapsedTime_( 0.0 ) {}
    double ElapsedTime() const { return elapsedTime_; }
    double & ElapsedTime() { return elapsedTime_; }

private: 
    double elapsedTime_;
};

3 个答案:

答案 0 :(得分:1)

他们没有相同的签名 - 一个是const而另一个不是。 Constness是成员函数签名的一部分。

答案 1 :(得分:1)

函数的签名由名称和参数类型定义。 你有两个具有相同名称的函数,但它们没有相同的参数!

你可能想知道它怎么可能?

因此,每个成员函数都隐式得到另一个参数:这是&#34;这个&#34;指针。指向调用该方法的对象的指针。

在方法结尾添加const时,指定&#34; this&#34;参数为 const指向const 的指针。在另一种方法(没有const)中,&#34;这个&#34;只是常量指针

因此,您有两种具有不同签名的方法,并且根本没有问题。

答案 2 :(得分:0)

签名不同,因为签名有const个限定词。 http://www.cprogramming.com/tutorial/const_correctness.html