2010-11-14 2 views
4

Я запутался о постоянных объектов в C++Confused о постоянных объектов C++

Когда мы проходили постоянный объект/ссылка на константный объект означает, что мы не можем изменить атрибут значения этого объекта?

или если его не Whats среднее или constant в том, что это «см» объект»или„атрибуты“

также, когда мы возвращаемся постоянный объект

объявляя функцию как

return_type function_name(parameters) const 
{ 

} 

ключевое слово const в конце функции - это синтаксис? и почему, если мы возвращаем const объект не должен он быть, как следует

const return_type function_name(parameters) 
{ 

} 

К сожалению, если его нуб вопрос;)

+0

Прочитайте [это] (http://www.parashift.com/c++-faq-lite/const-correctness.html). Это поможет вам. –

ответ

6

Синтаксис:

return_type function_name(parameters) const 
{ 

} 

function_name() Указывает, что может быть использовано для экземпляра класса const. Это не влияет на константу возвращаемого значения.

const return_type function_name(parameters) 
{ 

} 

... указует на то, что значение, возвращаемый из function_name() является сопзом (и ничего не говорит о константной-ности объекта, имеющем своей функция члена называется.)

+0

спасибо, в каких сценариях мы должны сделать функцию «постоянной»? – Sudantha

+0

@Sundantha В сценариях, где вы хотите вызвать метод на постоянном экземпляре.С другой точки зрения, все методы, которые не меняют состояние объектов, должны быть постоянными. –

3

Когда мы прошли постоянный объект/ссылка объекта const означает, что мы не можем редактировать значения атрибутов этого объекта?

Да. Если функция const, то функция не может изменять любые не изменяемые поля в классе. (Или вызвать любой другой неконстантный метод в классе).

и почему, если мы возвращаем константный объект не должен он быть, как следует

Поскольку тип возвращаемого значения может быть постоянной слишком. Рассмотрим следующий пример:

#include <string> 

class MyClass 
{ 
    std::string data; 
public: 
    void SetData(const std::string& content) 
    { 
     data.assign(content); 
    } 
    const std::string& GetData() const //Note that the function is const, and so 
    {         //is the reference it returns. 
     return data; 
    } 
}; 

Обратите внимание, что мы возвращаемся в const ссылку на внутренний элемент. Если мы вернем ссылку без const, то кто-то сможет использовать ссылку для изменения частного члена класса, в данном случае MyClass::data.

+0

спасибо! это было полезно! – Sudantha

+0

+1 для лучшего объяснения –

0

Эффективно добавленный const изменяет первый «скрытый» параметр метода от ClassType * const this до const ClassType * const this.

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