在类中使用全局函数

时间:2013-12-02 20:22:41

标签: c++ function class oop global

我正在尝试自己学习OOP,我想知道我在做什么是正确的还是反模式。可以在类中使用全局函数吗?例如:

bool isMale(char s)
{
      if(s=='m')return true;
      else return false;
 }
 class person
 {
       string name; char sex;
       bool collocate()
      {
           if(isMale(sex))cout<<"He's a male!";
           else cout<<"She's not!";
       }
 }

我知道这是一个非常愚蠢的代码,但我只想解释自己。它是否表示在一个类中使用全局函数或者它是一个坏习惯?我应该使用其他方式还是可以的? 感谢。

5 个答案:

答案 0 :(得分:3)

你可以做到,是的,它不被认为是反模式。它通常也是一个优雅的解决方案。 将全局函数包装到命名空间中通常也是个好主意

答案 1 :(得分:2)

在C ++中使用全局函数没有错;语言是C的超集,全球功能是C的面包和黄油。使用全局函数的好处是它不依赖于在调用函数之前实例化的对象。这可以使功能更容易单独测试。

通常,当以这种方式编写代码时,我将我的函数放入一个类中,然后使它们变为静态。这否定了编写与某些标准库函数同名的函数的可能性,因为它位于不同的命名空间中。即:

class Person
{
public:

    static bool isMale( char gender )
    {
        return gender == 'm';
    }

    bool collocate()
    {
        if( isMale( m_sex ) )
            cout << "He's a male!" << endl;
        else
            cout << "She's not!" << endl;
    }

private:

    /// m/f
    char m_sex;
    /// Person Name
    String m_name;
};

答案 2 :(得分:2)

由于此方法似乎与person类密切相关,因此它可以是类的静态方法。如果您可以想象在不包含person类的情况下需要该函数,并且确定对于person类对象和其他所有内容都应该使用相同的函数,那么在合适的命名空间中的全局函数 会更好。如果该方法被许多相关类使用,但似乎不属于任何类,则类和这些辅助函数应该整齐地位于同一名称空间中。

 class person
 {
 private:

       string name; 
       char sex;

 public:
       static bool isMale(char s)
       {
          if(s=='m')return true;
          else return false;
       }

       bool collocate()
       {
           if(isMale(sex))cout<<"He's a male!";
           else cout<<"She's not!";
       }
 }

答案 3 :(得分:1)

你可以做到。是。并非所有东西都是C ++中的对象。

答案 4 :(得分:0)

这没关系(尽管isMale需要一个参数)。 ^^ 实际上,只有真正需要访问类表示的函数才应该是成员函数。这样,如果在保持其界面的同时更改类表示,则可以减少担心的功能。