关于C ++中重载成员函数的问题?

时间:2011-05-05 09:14:56

标签: c++ overloading

我正在从地址https://cs.senecac.on.ca/~chris.szalwinski/archives/btp200.081/content/overl.html读取一些C ++文本。 在第一行中,他们说:

成员函数的签名包括:

  • 函数名称

  • 其参数的数据类型

  • 参数的顺序和
    可能

  • 函数的const状态。

我不明白他们的意思是说“函数的const状态”。

有人可以详细说明吗? 感谢。

3 个答案:

答案 0 :(得分:4)

在C ++中,您可以通过将该关键字附加到其签名(例如,const)来将类的成员函数声明为int MyClass:doSomething(int param) const {...}。这样做可以保证函数不会更改调用函数的类对象的(非mutable)成员 - 因此可以使用该类的const实例调用它。 / p>

允许为一个类的两个不同的成员函数,其签名的不同之处仅在于它们是否被声明为const

答案 1 :(得分:3)

它们的意思是总结函数必须不同的项目,以便放入相同的类范围。最后的const是:

struct A {
  void f();
  void f() const;
};

这些是有效的重载。如果您在f上拨打A,则会先拨打第一个,如果您在const A上拨打,则使用第二个:

A a;
a.f(); // takes first

A const& b = a;
b.f(); // takes second

请注意,此处滥用术语“签名”。函数的签名更广泛,并且还包括函数所属的类。签名唯一标识一个函数。

答案 2 :(得分:0)

将成员函数声明为const告诉编译器成员函数不会修改对象的数据,也不会调用非const的其他成员函数。

编译器将检查以确保您确实不修改数据。您可以为const或非const对象调用const成员函数,但不能为const对象调用非const成员函数(因为它可以修改对象)。

您可以在C ++ here中阅读有关constness的更多信息。