C++ 如何在命名空间中正确调用此函数?c++;
我的代码:C++ 如何在命名空间中正确调用此函数?c++;,c++,C++,我的代码: #include <iostream> using std::cout; namespace ProgramCall { class Class1 { public: int Sum(int A, int B) { return A + B; } public: float Sum(int A, float B) { return A + B; } }; class Cla
#include <iostream>
using std::cout;
namespace ProgramCall
{
class Class1
{
public: int Sum(int A, int B)
{
return A + B;
}
public: float Sum(int A, float B)
{
return A + B;
}
};
class Class2 : Class1
{
public:
int Sum(int A, int B, int C)
{
return A + B + C;
}
};
}
int main() {
int res = ProgramCall::Class1.Sum(1,2);
cout << res;
}
我怎样才能解决这个问题?我的意思是,我应该如何在名称空间中的类中调用这些函数?我是c++的初学者(但对c很在行),任何提示都很感激
ProgramCall::Class1
是一种类型,而不是对象。因此,ProgramCall::Class1.Sum(…)
是不正确的
您可以创建一个临时对象并对其调用Sum
int res = ProgramCall::Class1().Sum(1,2);
// ^^^ constructs an object
另一方面 使用
class Class2 : Class1
这也许是一个错误。这样做时,Class1
是Class2
的private
基类。您将无法使用:
int res = ProgramCall::Class2().Sum(1,2);
如果这就是目的,请保持代码原样。如果您希望能够使用上述行,请将Class2
更改为:
class Class2 : public Class1
{
...
}
首先,您不能将成员函数作为
ClassName::method()
调用,只要它不是静态的,非静态方法就绑定到类的实例,因此首先实例化它应该可以:
auto instance = ProgramCall::Class1();
int res = instance.Sum(1,2);
第二,对于您显示的问题,我建议您将内容保留在自由函数中。求和方法不需要状态,也不存在
Class1
或Class2
需要维护的不变性。虽然我不知道你是否打算以后丰富这些类。Class1
必须实例化,或者它的函数Sum()
标记为static
,然后你可以用ProgramCall::Class1::Sum(…)
调用它。你可能对这个问题感兴趣。这两个注释都很有用。泰!旁注:您不必用访问说明符标记每个成员。实际上,此代码仅用于语法研究,所以我正在测试不同的可能性。非常感谢。实际上,这段代码只是为了语法研究,所以我正在测试不同的可能性。
auto instance = ProgramCall::Class1();
int res = instance.Sum(1,2);