静态...不是真的静态

时间:2011-06-03 16:04:39

标签: c++ static

我一直在研究一个项目,我发现静态关键字有时候会变得一团糟。

我的项目使用库ncurses。我想要做的是获得我的屏幕高度,然后打印它。一旦我的屏幕初始化,静态类(屏幕)应始终具有相同的高度和宽度。

以下是我一直在努力做的一个例子:

class.hpp:

#ifndef CLASS_H
#define CLASS_H

#include <iostream>

#include "screen.hpp"

class Class{
public:
        Class(){
            std::cout << "Class: " << std::endl;
        }
        virtual ~Class(){}
};

#endif //CLASS_H

screen.hpp:

#ifndef SCREEN_H
#define SCREEN_H

#include <curses.h>
#include <signal.h>
#include <curses.h>

class Screen{
public:
    Screen();
    virtual ~Screen();

    void Init();
    void Close();

    int getW() const;
    int getH() const;

private:
    int w, h;
};

static Screen screen;

#endif // SCREEN_H

main.cpp:

#include <iostream>
#include "screen.hpp"
#include "class.cpp"

int main(int argc, char** argv){
    screen.Init();
    screen.Close(); //I just wanted to set my H and W in screen

    std::cout << "main: " << screen.getH() << std::endl;

    Class classa(); //Will print the screen H in the constructor

    return 0;
}

这就是结果:

iDentity:~$ g++ -Wall -g main.cpp screen.cpp class.cpp -lncurses
iDentity:~$ ./a.out
main: 24
Class: 0
iDentity:~$

有什么东西我不懂静电吗?我应该创建一个接口文件(带有命名空间接口)吗?请帮帮我。

感谢。

3 个答案:

答案 0 :(得分:2)

Class classa(); //Will print the screen H in the constructor

不能打印任何内容,因为它不会声明变量,因此不会调用构造函数。 声明函数classa,它不带参数,并返回Class

对于static,我在引用的代码中看不到任何静态内容。

答案 1 :(得分:0)

您可以使用

获得所需的效果
static int w, h;

但你似乎还有更多的想法。您是否希望一次允许存在多个Screen?您是否希望Class旁边的其他课程(致电您的班级Class)才能访问Screen?这可能是Singleton模式或嵌套类的工作。

答案 2 :(得分:0)

没有&#34;静态类。&#34;

你可以拥有一个类的静态实例......

class Foo
{
};

static Foo my_foo_;

或者您可以在班级中使用静态方法......

class Foo
{
public:
  static void Bar() {};
};

int main()
{
  Foo::Bar();
}

后者是我怀疑你真正想要的。

请注意,为了获得此功能,您实际上必须使用关键字static,这是您在发布的示例中永远不会做的。