【问题标题】:Saving functions in a class C++在 C++ 类中保存函数
【发布时间】:2013-05-28 06:29:12
【问题描述】:

我是个菜鸟。

我已经为 int 到 string 和 string 到 int 的转换创建了函数。

我想保存它们,这样我就可以在任何程序中使用它们,所以我可以像#include <iostream>一样调用它们

我是否通过创建一个类来做到这一点(然后没有私有成员变量?)

如果我作为一个类来做,我如何在不创建对象的情况下使用函数?

基本上我想创建自己的 cmath 或字符串之类的东西,但我什至不知道如何调用它来了解如何制作它。

【问题讨论】:

  • C++ 中的所有内容都不需要类。您可以只使用非成员函数(通常在命名空间内以避免名称冲突)。另请注意,C++ 标准库已经提供了您提到的功能。
  • 免费函数很好,但命名空间包装器是个好主意。

标签: c++ c class function iostream


【解决方案1】:

如果你只有简单的函数,你可以把它们放在一个命名空间中,它也像一个容器一样,然后把它们放在一个单独的 cpp 文件中,并创建一个包含原型的 .h 文件。

mymath.h 的 i.E:

#ifndef MYMATH_H
#define MYMATH_H

namespace mymath
{
     int dosomething(int y);
}

#endif

在 mymath.cpp 中:

#include "mymath.h"

int mymath::dosomething(int y)
{
}

然后,当你想使用它时,你包含你的 #include "mymath.h" 文件并将 cpp 链接到你的项目。

【讨论】:

  • 您在 mymath.cpp 中忘记了 #include "mymath.h"。另外,int mymath::dosomething(int y) 在定义中
  • 这似乎在正确的轨道上,现在我遇到了 inttostring 工作的问题,但 stringtoint 用红色下划线(visual express 2010)并且错误是“表达式必须有一个指向类型函数的点”
  • 通过将头文件中的 int stringtoint(string) 更改为 int stringtoint(string word) 来修复它,谢谢
【解决方案2】:

mystring.hpp

#ifndef MYSTRING_HPP
#define MYSTRING_HPP

#include <string>

namespace n_mystring
{
    std::string & IntToString( int Int );
    int StringToInt( std::string & String );
}

#endif

mystring.cpp

#include "mystring.hpp"

std::string & n_mystring::IntToString( int Int ) {
    //.... implementation
};

int n_mystring::StringToInt( std::string & String ) {
    //.... implementation
};

【讨论】:

    【解决方案3】:
    #include <iostream>
    
    class Tools {
        public :
          void static sneeze ();
    };
    
    void Tools::sneeze ()
    {
        std::cout << "atchoum";
    }
    
    
    int main () {
        Tools::sneeze(); // atchoum
    }
    

    【讨论】:

    • 头文件呢?为什么不命名空间?
    • 命名空间的工作方式与界面非常相似,您只需收集所有类似主题的功能,这样您就有了一个空间,其中包含可以放入程序中的工具。我希望那个给我帖子打分的人解释一下他这样做的原因。
    • 不是我。但是我认为,downvote 是因为你的例子很糟糕。您不使用头文件。你也使用class 而不是namespace
    • 工具箱是一个对象,对吧?工具箱可以在命名空间“车库”中。另外,我只是没有明确地将每个文件的声明分开,因为它是一个示例,更短且更易于阅读。
    • OP 的问题:I want to save them so I can use them in any program。你的例子没有做到这一点。此外,您的代码中没有任何名称空间或对象。我不明白你在说什么。你?别忘了这是 C++
    猜你喜欢
    • 2016-09-11
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    相关资源
    最近更新 更多