2013-07-14 2 views
9

Я смотрел на некоторый исходный код с открытым исходным кодом, и я заметил, что для некоторых методов вместо использования void для типа возвращаемого значения они использовали ссылку на этот класс.Ссылка на объект vs Тип возврата Void для метода

Пример:

class Object 
{ 
private: 
    float m_x; 
public: 
    Object(); 
    Object& setX(float x) 
    { 
     m_x = x; 
     return *this; 
    } 
}; 

Обычно, я хотел бы написать такую ​​же функцию, как это:

class Object 
{ 
private: 
    float m_x; 
public: 
    Object(); 
    void setX(float x) 
    { 
     m_x = x; 
    } 
}; 

Есть ли какие-либо преимущества использования одного над другим?

ответ

8

Да, есть некоторые преимущества с возвратом ссылки. При возврате ссылки вы можете продолжить работу над возвращенной ссылкой и соединить несколько вызовов функций вместе. Например, если были setY функция тоже, вы можете сделать это:

object.setX(5).setY(10); 

Возвращение ссылки на самом деле не имеют недостатков, но допускает некоторые приятные вещи. Его можно использовать для создания плавных интерфейсов, обходной недостаток именованных параметров на C++, если хотите, и другие вещи.

Связанные гласит:

+0

Большое спасибо за ответ. Я не знал, что вы можете сделать это на C++. – Xplane

+5

Этот стиль известен как ["метод цепочки"] (http://en.wikipedia.org/wiki/Method_chaining) или ["свободный интерфейс"] (http://martinfowler.com/bliki/FluentInterface.html). –

Смежные вопросы