Sas*_*hra 2 c++ static-methods static-classes
我想实现一个简单的静态类,该类可以在练习时计算c ++中整数的pow值。所以我的代码在这里:
#pragma once
#ifndef MATH_H
#define MATH_H
static class Math
{
public:
static int pow(int,int);
};
#endif /* MATH_H */
Run Code Online (Sandbox Code Playgroud)
和pow功能的实现:
#include "Math.h"
int Math::pow(int base, int exp){
if(exp==1)
return base;
else if(exp%2==0)
return pow(base,exp/2)*pow(base,exp/2);
else
return pow(base,exp/2)*pow(base,exp/2)*base;
}
Run Code Online (Sandbox Code Playgroud)
但是cygwin编译器抛出编译错误:
In file included from Math.cpp:16:0:
Math.h:16:1: error: a storage class can only be specified for objects and functions
static class Math
^~~~~~
Run Code Online (Sandbox Code Playgroud)
C ++没有“静态类”,因为它们在其他语言中正式存在。但是,您可以删除默认构造函数(C ++> = 11)或将其构造为私有且未实现(C ++ <11),这具有使类型不可构造的相同效果:
// C++ >= 11
class Math
{
public:
Math() = delete;
};
// C++ < 11
class Math
{
private:
Math(); // leave unimplemented
};
Run Code Online (Sandbox Code Playgroud)
使用此代码,该行将Math m;失败:
(C ++> = 11)
error: use of deleted function 'Math::Math()'(C ++ <11)
error: 'Math::Math()' is private within this context
但是,“静态类”通常是C ++中的反模式,应首选自由函数。(在某些情况下,静态类可能有用,尤其是在进行模板元编程时。如果您不这样做,则几乎可以肯定不需要静态类。)
考虑改为在命名空间中声明函数:
namespace math {
int pow(int, int);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |