доступ к объектам класса без создания экземпляра?
#include <iostream>
class Universe {
private:
int the_answer {42};
public:
static void static_method() {
std::cout << "I am a pure static method" << std::endl;
}
void class_method() {
std::cout << " I would like to know the_answer" << std::endl;
std::cout << the_answer << std::endl;
}
};
int main()
{
Universe::static_method();
Universe::class_method(); // error: call to non-static member function without an object argument
return 0;
}
передавай экземпляр в static метод
int the_answer{42} - это поле объекта, а не класса, поэтому нужен объект static int the_answer - другой разговор
Никак
Спасибо разобралась. Но чтоб я могла инициализировать мне надо сделать его const так как иначе мне придется инициализировать его в конструкторе, которого у метода класса нет.
class Foo { static int a; } int Foo::a = 5;
а как тогда? без const оно выдает ошибку: error: non-const static data member must be initialized out of line
Можно и не const, просто начальное значение должно быть хоть каким-нибудь. И для C++17 хватит inline static int the_answer = XXX;, чтобы не писать ужасы вне класса
Если перевести ошибку, то станет понятно, что это не "нельзя", а "можно, но.."
Спасибо. С inline работает. Пошла разбираться что же значит inline применимо к методам класса.
inline к static полям*
Смотри сразу inline variable
Сейчас скину отличный доклад по модификаторам
https://youtu.be/G_jcBrrYPAs
Спасибо. смотрю.
Это как вот так? Если объект класса это и есть экземпляр? То есть ты спрашиваешь "Как сделать метод класса, который бы имел доступ к объектам этого класса, которые мы никогда не будем создавать и которые не существуют?"
именно. Мы там выше уже разобрались как так сделать.
Ну, надо class_method тут тоже сделать static, оно будет работать, но только никаких объектов-экземпляров не будет
Это умеет только статический метод. Такой метод может обращаться только к статическим полям класса
А эт нормально инизиал. переменную в классе ?
Гспди, как жалко то тебя, как всё в твоей голове -то перепутано...
да распутается, все нормально будет, если ей это действительно нужно)
А разве constexpr не лучше в этой ситуации?
constexpr включает в себя const в этом контексте
если я правильно понял, она пыталась найти аналог декоратора classmethod и staticmethod из питона
и до C++17 static constexpr не включает inline, что может привести к чудесным чудесам при инициализации переменной внутри класса..
А она хочет менять в будущем эту переменную или что?
С козырей зашли-с?
она сказала, что не хочет const
#include <iostream> class Universe { private: int the_answer {42}; public: static void static_method() { std::cout << "I am a pure static method" << std::endl; } void class_method() { std::cout << " I would like to know the_answer" << std::endl; std::cout << the_answer << std::endl; } }; int main() { Universe::static_method(); Universe::class_method(); // error: call to non-static member function without an object argument return 0; }
Да, можно, с 11го.
Складывается впечатление что она хочет сделать что-то неправильное, если честно
Настя, вот прежде всего, НЕ НАДО искать какие-то аналоги из других языков в изучаемом языке. ООП ВЕЗДЕ РАЗНОЕ!
не мне судить, но static non-const - это нормально
тут я вряд ли подскажу тогда, сам не юзал classmethod, но предположу, что ввиду разлчных реализаций подходов к ООП, он либо не принесет в с++ пользы, либо просто не является фичей первой необходимости. Скорее всего первое
класс в С++ не является объектом
+, точно) че-то сразу не подумал
Обсуждают сегодня