Другие языки программирования и технологии

C++. Область видимости и доступ к данным

Я хочу вынести кусок кода, который будет повторяться в нескольких методах, в статическую приватную функцию. И вот вопрос: будет ли эта функция иметь доступ к тем же данным, что и метод, или мне ей нужно передать объект?
Нет, так не получится, так как это просто функция, поэтому надо передавать объект. Но целесообразнее описывать общий код в обычных методах. Статическая функция же не является членом класса и эквивалентна обычной функции)))
Farhod Sattorov
Farhod Sattorov
10 755
Лучший ответ
Алексей Исайкин Просто тот кусок кода не всего можно вызвать через объект. Иногда объекта еще не существует. Видимо проще будет вставить этот кусок кода во все функции, либо передавать 6 параметров, что тоже как-то криво.
Код простенький, используется однократно и в конструкторах/деструкторах, но что вам мешает изменить правила))

#include <iostream>
using namespace std;
class Test {
public:
Test() : x_(0) { Test::inc(); }
~Test() { Test::dec(); }
static size_t count() { return Test::value; }
void set(const int x) { x_ = x; }
int get()const { return x_; }
private:
int x_;
static size_t value;
static void inc() { ++Test::value; }
static void dec() { --Test::value; }
};
size_t Test::value = 0U;
int main() {
Test a, b, c;
a.set(-8);
cout << "a: " << a.get() << '\n';
b.set(12);
cout << "b: " << b.get() << '\n';
c.set(-5);
cout << "c: " << c.get() << '\n';
cout << "count: " << Test::count() << '\n';
a.~Test();
cout << "count: " << Test::count() << '\n';
b.~Test();
cout << "count: " << Test::count() << '\n';
c.~Test();
cout << "count: " << Test::count() << '\n';
system("pause");
}
откуда статическая функция узнает, с каким экземпляром объекта работать? Или передать ссылку (указатель) на объект или вместо статического - обычный метод класса.
JZ
Johongir Zahidov
90 706
Алексей Исайкин я тоже об этом подумал, но сомнения были)
Алексей Исайкин просто можно, сделать все без этого, но придется переждать 6 параметров, и я задумался, как лучше сделать
ты вообще не шаришь брось это не твое.