Как это сделать на C++?Как я могу объявить неизменный класс в C++ (пример Java)
//java example
public class MyImmutable {
private final int numToBeInitializedOnConstructionOrCompilationError;
public MyImmutable(int n) {
this.numToBeInitializedOnConstructionOrCompilationError = n;
}
}
С Java, если окончательное свойство не инициализируется при объявлении или на конструктор, компилятор выдаст ошибку, этот код работает, так как переменная-член инициализируется в конструкторе. Как я могу обеспечить неизменность в объявлении класса в C++?
(определение только публичных методов геттер не является приемлемым ответом, я знаю, «сопзЬ» должен быть частью решения)
Если я это сделать в C++:
class MyImmutable
{
private:
const int numToBeInitializedOnConstruction;
public:
MyImmutable(int n);
};
MyImmutable::MyImmutable(int n)
{
numToBeInitializedOnConstruction = n;
}
я получаю следующее ошибки, в основном говорят мне, что я не могу назначить член const, поэтому я думаю, что const более строгий, чем «final» java, есть ли другое ключевое слово или есть способ инициализировать const после того, как он был объявлен?
$ gcc const.cc
const.cc:10:10: error: constructor for 'MyClass' must explicitly initialize the const member
'numToBeInitializedOnConstruction'
MyClass::MyClass(int n) {
^
const.cc:3:13: note: declared here
const int numToBeInitializedOnConstruction;
^
const.cc:11:36: error: read-only variable is not assignable
numToBeInitializedOnConstruction = n;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
2 errors generated.
так как я могу объявить эквивалент конечной переменной-члена java в C++? Это возможно?
спасибо так много, что это именно то, что мне нужно :) – Gubatron