C++ 与对象无关的方法

C++ 与对象无关的方法,c++,C++,我有一个关于OOP的基本问题。我想在类内创建一个方法,该方法使用该类的两个对象作为参数,并基于这些对象的属性返回一个浮点值 public float MyMethod(CMyClass obj1, CMyclass obj2) 当我想在main()中使用此方法时,我不能这样做: CMyClass o1 = CMyClass(); CMyClass o2 = CMyClass(); float x = MyMethod(o1, o2); o1.MyMethod(...) 我无法看到此方法,

我有一个关于OOP的基本问题。我想在类内创建一个方法,该方法使用该类的两个对象作为参数,并基于这些对象的属性返回一个浮点值

public float MyMethod(CMyClass obj1, CMyclass obj2)
当我想在main()中使用此方法时,我不能这样做:

CMyClass o1 = CMyClass();
CMyClass o2 = CMyClass();
float x = MyMethod(o1, o2);
o1.MyMethod(...) 
我无法看到此方法,因为它与对象相关。我可以这样访问它:

CMyClass o1 = CMyClass();
CMyClass o2 = CMyClass();
float x = MyMethod(o1, o2);
o1.MyMethod(...) 

但是这没有意义。

您可以声明方法
静态
,并像
MyClass::MyMethod

class MyClass {
public:
    static void MyMethod(const MyClass & arg1, const MyClass & arg2) {}
};
你想要

static float MyMethod(CMyClass obj1, CMyclass obj2)

static
关键字将使方法属于类,而不是类/对象的单个实例。作为
CMyClass::MyMethod进行访问

既然您想访问这些属性,请使用友元函数(非成员)。您可以在类中声明它:

friend float MyMethod(CMyClass obj1, CMyclass obj2);

与java不同,C++中的公共不是修改方法,也可以使用静态的,但静态的关键字已经被滥用,不要一直使用静态!对于操作符重载,朋友或Free函数的情况要好。你知道,不像java,C++函数不必是类的成员吗?<代码>公共浮点MyMethod(CyMyObj1,CyMyObj2)< /C> >这是C++中的语法错误。