我正在尝试自己学习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!";
}
}
我知道这是一个非常愚蠢的代码,但我只想解释自己。它是否表示在一个类中使用全局函数或者它是一个坏习惯?我应该使用其他方式还是可以的? 感谢。
答案 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需要一个参数)。 ^^ 实际上,只有真正需要访问类表示的函数才应该是成员函数。这样,如果在保持其界面的同时更改类表示,则可以减少担心的功能。