Другие языки программирования и технологии
C++. Область видимости и доступ к данным
Я хочу вынести кусок кода, который будет повторяться в нескольких методах, в статическую приватную функцию. И вот вопрос: будет ли эта функция иметь доступ к тем же данным, что и метод, или мне ей нужно передать объект?
Нет, так не получится, так как это просто функция, поэтому надо передавать объект. Но целесообразнее описывать общий код в обычных методах. Статическая функция же не является членом класса и эквивалентна обычной функции)))
Алексей Исайкин
Просто тот кусок кода не всего можно вызвать через объект. Иногда объекта еще не существует. Видимо проще будет вставить этот кусок кода во все функции, либо передавать 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");
}
#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");
}
откуда статическая функция узнает, с каким экземпляром объекта работать? Или передать ссылку (указатель) на объект или вместо статического - обычный метод класса.
Алексей Исайкин
я тоже об этом подумал, но сомнения были)
Алексей Исайкин
просто можно, сделать все без этого, но придется переждать 6 параметров, и я задумался, как лучше сделать
ты вообще не шаришь брось это не твое.
Похожие вопросы
- Локальные и глобальные изменения в С + +области видимости
- C++ Проверка правильности ввода данных.
- Учу C++! Уже знаю: типы данных, циклы. условия, привидения и т. д учу 5дней. вот программа! Как норм за 5 дней?
- C++. Типы данных. Создание типа данных.
- C++(консоль) Программа, которая выводит данные треугольников со стороной максимум 5000
- Создание базы данных на Turbo C
- Передача данных по TCP(winsock, C++)
- Хранение 10 млн строк данных (бд или нечто другое) [c#]
- Обмен данными между формами C#
- обмен данными C# и надежность жесткого диска