class arbit
{
int var;
public:
int method1();
int method1() const;
};
爲什麼在這裏聲明兩次相同的函數時g ++不會發出警告?在C++類中重新聲明函數
class arbit
{
int var;
public:
int method1();
int method1() const;
};
爲什麼在這裏聲明兩次相同的函數時g ++不會發出警告?在C++類中重新聲明函數
因爲一個是const
而另一個不是。這些是不同的重載,具有不同的簽名。其中一個或另一個被調用,具體取決於您所調用的對象是否爲const
。
實施例:
arbit x;
x.method1(); // calls the non-const version
arbit const &y = x;
y.method1(); // calls the const version
你應該聲明的方法如const
,如果它不修改該對象的(可見)狀態。這可以讓你發放const arbit
個對象,並確保有人不會意外修改它們。例如,您將生成一個功能setValue
非const
(因爲它修改了該對象),但getValue
將爲const
。因此,在const
對象上,您可以調用getValue
而不是setValue
。
¹當有意願時,有一種方法,它叫做const_cast
。但忘記我曾告訴過你。
也可以與volatile
改性劑和兩者的組合超載:const volatile
#include <iostream>
using namespace std;
class foo {
public:
void bar() { cout << "bar()" << endl; }
void bar() const { cout << "bar() const" << endl; }
void bar() volatile { cout << "bar() volatile" << endl; }
void bar() const volatile { cout << "bar() const volatile" << endl; }
};
int main() {
foo f;
f.bar();
foo const f_const;
f_const.bar();
foo volatile f_volatile;
f_volatile.bar();
foo const volatile f_const_volatile;
f_const_volatile.bar();
}
也就是說將輸出:
bar()
bar() const
bar() volatile
bar() const volatile
燁,C++對待常量作爲過載參數 – Digikata 2010-08-09 19:35:08
重載上' const'可能非常有用。例如,檢查'std :: vector'中的operator []'。 – 2010-08-09 19:38:33
可以爲const和 和nonconst對象調用const成員函數,而nonconst成員函數只能針對非常用對象調用。 \t 現在我該如何從非常量對象x調用method1函數的const版本。它是const_cast,它可以爲我做所需的操作? – Amit 2010-08-09 19:43:28