簡體   English   中英

使用非成員函數重載運算符

[英]Overloading operators with non-member functions

這個問題的答案似乎使我無所適從,但是如何使用非成員函數進行重載。 您是否只是創建一個程序級別的函數,並且在原型(或定義)存在的地方,該類類型的操作符就會重載?

對於成員函數, this將是左側參數,這意味着您的運算符將僅具有一個參數(對於一元運算符則沒有參數)。 使用獨立功能,您必須分別為二進制或一元運算符提供兩個或一個參數。

一個很好的例子是流的<<操作符:

class T;

// ...

std::ostream & operator<<(std::ostream &os, const T &val)
{
    // ...
    return os;
}

在這里, os是左側參數,而val是右側參數。

至於“ where”,必須在您使用的地方定義運算符。 通常,將它們與要重載運算符的類型放在同一位置。

編輯:

對於非平凡的運算符(原始類型的算術運算),運算符是函數調用的語法糖。 執行此操作時:

std::cout << "Hello";

就像這樣寫:

operator<<(std::cout, "Hello");

但是更具可讀性。

對於成員運算符,left參數將是this (這就是為什么成員運算符少一個參數的原因)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM