程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [C/C++]_[操作符重載operator type()和operator()的區別]

[C/C++]_[操作符重載operator type()和operator()的區別]

編輯:C++入門知識

[C/C++]_[操作符重載operator type()和operator()的區別]



場景:

1.看到WTL的CWindow源碼時會發現這樣的operator重載,仔細看會發現它並不是重載()操作符.

	operator HWND() const throw()
	{
		return m_hWnd;
	}

如果重載()操作符,應該是,返回值HWND應該在operator的左邊,而且應該有兩個括號()

HWND operator ()() const throw()
{
	return m_hWnd;
}

這種類型的操作符重載應該是type conversion operator(類型轉換操作符),它可以把類類型轉換為指定的類型,如果定義了這種轉換,好處就是該類對象賦值給 method(HWND),參數是HWND類型的方法時會自動轉換為HWND類型,或者需要打印這個類信息時。operator std::string().


函數原型:

operator Type()

而重載()操作符確實是需要調用()才會調用,比如object([param])。

測試代碼:

#include 
#include 
#include 
#include 
#include 

using namespace std;

class Total
{
public:
	Total(float sum,float discount)
	{
		sum_ = sum;
		discount_ = discount;
	}
	~Total(){}

	operator float()
	{
		return sum_* discount_;
	}

	operator std::string()
	{
		char str[128];
		sprintf(str,"%f",sum_* discount_);
		return std::string(str);
	}

	float operator()()
	{
		return sum_* discount_;
	}
	float sum_;
	float discount_;
};

int main(int argc, char const *argv[])
{
	Total to(89,0.8);
	cout << to << endl;
	cout << to() << endl;
	cout << (std::string)to << endl;
	//cout << to(0.9) << endl;
	return 0;
}


輸出:

71.2
71.2
71.200001


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved