Нет причин запрещать вызывать свободную функцию из функции-члена. Если бы это было так, классы были бы довольно бесполезны (они были бы способом предотвратить повторное использование кода вместо его поддержки).
Как упоминалось в комментарии, в cout<<"i am fun2\n";
вы вызываете функцию, не являющуюся членом, и вызов fun
мало чем отличается от этого.
Далее, с крошкой соли ваш пример мало чем отличается от
#include <iostream>
using namespace std;
class demo_class
{
};
void fun2(void)
{
cout<<"i am fun2\n";
}
void fun3(demo_class& dc)
{
cout<<"i am fun\n";
cout<<"i can call fun2\n";
fun2();
}
int main()
{
demo_class ob1;
fun3(ob1);
return 0;
}
Функция-член всегда может быть преобразована в свободную функцию. Если бы fun
получал доступ к закрытым членам, мы должны были бы объявить его как friend
, чтобы сделать вышеупомянутую работу, но в противном случае здесь нет проблем.
Вы также можете выполнять обратное и вызывать функции-члены в свободных функциях, как в
struct foo {
void bar(){}
};
void func(foo& f) {
f.bar();
}
int main() {
foo f;
func(f);
}