2010-09-03 101 views
2

我是一名中級C++用戶,遇到以下情況。下面顯示的類定義可以用g ++編譯器編譯。但我不能把手指放在整個語法的意義上。
我的猜測是功能operator int()返回一個int類型。隱式轉換運算符重載語法

而且,我無法弄清楚如何在main()

class A 
{ 
    public: 
    A(int n) { _num = n; } //constructor 

    operator int(); 

    private: 
    int _num; 
}; 

A::operator int() // Is this equivalent to "int A::operator()" ?? 
{ 
    return _num; 
} 

int main() 
{ 
    int x = 10; 
    A objA(x); //creating & initializing 

    // how to use operator() ? 
    // int ret = objA(); // compiler error when uncommented 

    return 0; 
} 

任何幫助將不勝感激使用重載operator()

+0

重載'運算符()'?什麼重載'operator()'?你的代碼沒有任何重載的'operator()'。這就是爲什麼你不能使用它。 – AnT 2010-09-03 06:53:48

+0

是的。我非常誤會關鍵字操作符把我帶到其他地方。 – vthulhu 2010-09-03 07:15:12

+0

[此C++語法的含義是什麼以及它爲什麼可以工作?]的可能的重複(http://stackoverflow.com/questions/3632746/what-does-this-c-syntax-mean-and-why-does-it工作) – sbi 2010-09-03 07:47:22

回答

7

operator int()轉換函數聲明一個用戶定義的轉換從Aint,這樣就可以寫出這樣的代碼

A a; 
int x = a; // invokes operator int() 

這不同於int operator()(),其聲明瞭一個函數調用操作者沒有參數並返回int。該函數調用運營商允許你編寫代碼就像

A a; 
int x = a(); // invokes operator()() 

哪一個要使用完全取決於你想要得到的行爲。請注意,轉換運算符(例如,operator int())可能會在意外時間調用,並可能導致有害的錯誤。

+0

謝謝!這是很酷的東西! – vthulhu 2010-09-03 06:37:56

+0

@vthulu: 你似乎是社區新人,所以只是爲了您的信息,如果你對上述答案感到滿意,你會想選擇出現在這個答案旁邊的勾號,這實質上意味着你接受答案 – mukeshkumar 2010-09-03 07:17:40

+2

「請注意,轉換運算符(例如,運算符int())可能會在意外時間被調用,並可能導致有害的錯誤。」我會說這有點強:__遠離他們!__ – sbi 2010-09-03 07:42:33

0

你可以使用這個

#include <iostream> 
using namespace std; 
class A{ 
public: 
    A(int n) { _num=n;} 
    operator int(); 

private: 
    int _num; 

}; 
A::operator int(){ 

    return _num; 

} 
int main(){ 

    A a(10); 
    cout<<a.operator int()<<endl; 
    return 0; 

}