对于c ++中的某些事情,静态函数是否可以接受?

jma*_*erx 4 c++

有时,对于某些事情,例如在控制台上写一行,感觉就像所有对象都应该可以全局访问的东西.就像是:

writeError("UNHANDLED EXCEPTION",someData);
Run Code Online (Sandbox Code Playgroud)

数学函数之类的东西也是这样的.但是,在做这种事情时,你如何划清界限呢?

Ste*_*sop 10

有些人在非成员函数需要friend作为其参数之一的点处绘制线,因此它们使用了许多自由函数.

有些人在非成员函数可以合理地成为其中一个参数的成员函数的点处绘制线,即使它实际上不使用类内部.他们的自由功能有所减少.

通常最好不要将其视为"变得糟糕的做法" - 并非C++中的所有设计都是"适当的"面向对象的.如果你的任务最好用OOP以外的方法解决,那么使用OOP本身就是"不好的做法".关于如何最好地设计代码的论证可以在任何语言中无限期地继续下去,但是C++并没有特别努力引导你去编写类.

也可以看看:

有效的C++项目23首选非成员非友元函数到成员函数


Chr*_*s K 6

这种性质的全球API就好了.

这些天最好的做法是将它们包装在命名空间中:

namespace LOGGING { 
     void writeError(message, ...); 
} 
Run Code Online (Sandbox Code Playgroud)

在C++中创建静态与在Java中创建静态不是一回事.在C++中,只能从该编译单元(.cpp文件)中看到静态函数.它不会使它成为全局非类函数.

但是,C++中的静态成员函数在Java中是相同的 - 它允许从对象上下文类:: method(params)之外调用它而不是classObject.method(params).