Слишком много C# и слишком мало C++ делают мой ум головокружительным... Кто-либо мог напомнить мне, что означает это объявление C++? А именно, конечная "константа".Большое спасибо.
protected:
virtual ostream & print(ostream & os) const
Метод const
просто получит указатель const
this
.
В этом случае указатель this
будет иметь тип const ThisClass * const
вместо обычного типа ThisClass * const
.
Это означает, что переменные-члены не могут быть изменены изнутри метода const
. Из такого метода нельзя вызывать даже методы, отличные от const
. Однако переменная-член может быть объявлена как изменяемая
, и в этом случае это ограничение к ней не применяется.
Следовательно, когда у вас есть объект const
, компилятор позволит вам вызывать только те методы, которые помечены как безопасные с помощью ключевого слова const
.
Окончание const
означает, что функция print
не должна изменять состояние любого из члены класса, в котором он объявлен (и поэтому не могут вызывать какие-либо функции-члены этого класса, которые также не объявлены const
).
В приведенном ниже примере функция print
в классе Foo
не может изменить ни одну из переменных-членов Foo
(если они не объявлены mutable
) и не может вызывать какие-либо неконстантные функции в Foo
.
class Foo {
public:
Foo(string value) { m_value = value; }
protected:
ostream & print(ostream & os) const {
m_value = string("foobar"); // won't compile
os << m_value;
return os;
}
private:
string m_value;
};
const
в объявлении метода сообщает компилятору, что функция безопасно вызывать константный объект того типа, членом которого является функция. Он также сигнализирует компилятору, что функция не должна изменять состояние объекта и что она не сможет изменить какие-либо переменные-члены, которые не помечены как mutable
.
Если вы опустите константу, этот код не будет работать:
const Foo bar;
bar.print(std::cout); // Will fail to compile unless 'print' is marked const
Вы объявляете защищенный виртуальный метод с именем print
, который принимает в качестве параметра ссылку на ostream и возвращает ссылку на ostream.
Ключевое слово const означает, что метод не сможет изменить состояние объекта, указатель this
будет иметь значение const.
Виртуальный метод - это метод, поведение которого можно переопределить в наследующем классе, в основном ключевое слово virtual дает C ++ возможность поддерживать полиморфизм.
И, наконец, если вы не знаете, что такое ссылка , перейдите сюда
Исходя из C #, я полагаю, вы знаете, что означает защищенный:)