【问题标题】:Declaring a class as static?将一个类声明为静态的?
【发布时间】:2017-07-17 18:43:38
【问题描述】:

背景:

我目前正在学习edX | Intermediate C++ 课程。尽管该课程由 Microsoft 领导,但并未说明您需要使用他们的 IDE Visual Studios 才能成功完成。我只有一台 Mac,所以我完全不用担心使用 Xcode 完成了介绍课程。

问题:

在中级课程的第一个模块中,它声明您可以将标题中的类声明为静态类,如下所示:

// Math.h
// Header file for the Math class

#pragma once

// Math class definition
static class Math
{
    public:

    // given base and exponent, calculate value
    static int Math::pow(int base, int exp);

};

Xcode 将错误标记为:

类型声明中不允许使用“静态”

根据之前提出的here 的 SO 问题,这是不可能的,但我不确定自 2008 年回答该问题以来这是否发生了变化,或者这可能是编译器特定的/VS 功能,由微软迷惑人。

【问题讨论】:

  • 如果你只想要一个类中的公共静态成员函数,那么你可以只使用namespace。至于您的问题,向 C++ 中的类或结构添加链接说明符(如 static)从来都不是有效的。
  • 或者像Java一样只使用私有构造函数和静态方法,你不必将类定义为静态的。
  • 谢谢两位。我刚刚做了一点谷歌,可以看到你在说什么。主要问题是我猜C++不可能做到这一点?如果是这样,微软为什么要教这个?
  • 这可能是 C++/CLI 功能? C++/CLI 是 C++ 的扩展变体,具有 .NET 和许多不可移植和非标准特性。
  • 请注意Math::pow 声明中的Math:: 限定符也是无关的,这也会导致编译错误。

标签: c++ xcode visual-studio


【解决方案1】:

static 在这种情况下无效。另一种方法是全静态成员,但类本身无效。

类似的语法用法是:

static class Math
{

    public:

    // given base and exponent, calculate value
    static int Math::pow(int base, int exp);

} math;  // <---- note object

在这种情况下,对象mathstatic,而不是类本身。

【讨论】:

  • 谢谢。我认为删除 static 关键字并仅将我需要的方法设为静态会更有意义(并且更易于阅读)。
【解决方案2】:

只需在上课前删除 static 关键字。练习中的所有内容仍然以同样的方式有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2012-05-20
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    相关资源
    最近更新 更多