Когда плюсистов насильно пересаживают на Си, одним из пунктов ломки по нормальным языкам является отсутствие адекватных объектов и их методов. Но если становится совсем плохо, методы можно легко реализовать.
Пусть дана структура, точка, например. Она состоит из 2 координат:
Функция изменения координат будет выглядеть так:
Но можно применить C++ ситль и тогда у объектов внезапно появятся методы:
Как видим, теперь одну и ту же функцию можно вызывать просто так, а можно как метод объекта. Вообще, второе на мой взгляд довольно сомнительная практика.
Из плюсов у неё только то, что можно меньше заботиться о пространстве имён (часто для решения этой проблемы в Си используется префикс типа point_MoveBy).
Из минусов - лишний геморрой с указателями на функции, увеличивается размер объектов, на вызов метода из одного объекта можно подать другой объект, что приведёт к путанице.
В общем это приём, который добавляет проблем, не внося никаких плюсов.
UPD: самый существенный минус - осложнения с оптимизацией. Об этом здесь.
Пусть дана структура, точка, например. Она состоит из 2 координат:
typedef {
float x;
float y;
} Point;
Функция изменения координат будет выглядеть так:
void movePointBy(Point * p, int x, int y) {
p->x += x;
p->y += y;
}
Но можно применить C++ ситль и тогда у объектов внезапно появятся методы:
typedef struct _Point {
void (*moveBy) (struct _Point * self, int x, int y);
float x;
float y;
} Point;
void movePointBy(Point * p, int x, int y) {
p->x += x;
p->y += y;
}
int main() {
Point p;
p.moveBy = movePointBy;
movePointBy(&p, 1, 2);
p.moveBy(&p, 1, 2);
return 0;
}
Как видим, теперь одну и ту же функцию можно вызывать просто так, а можно как метод объекта. Вообще, второе на мой взгляд довольно сомнительная практика.
Из плюсов у неё только то, что можно меньше заботиться о пространстве имён (часто для решения этой проблемы в Си используется префикс типа point_MoveBy).
Из минусов - лишний геморрой с указателями на функции, увеличивается размер объектов, на вызов метода из одного объекта можно подать другой объект, что приведёт к путанице.
В общем это приём, который добавляет проблем, не внося никаких плюсов.
UPD: самый существенный минус - осложнения с оптимизацией. Об этом здесь.