0

单身疑问:我如何能够访问全局空间中的私有静态对象?代码如下。这运行得很好。


#include <iostream>
using namespace std;

class Singleton {
    static Singleton s;
    static void func()
    {
        cout<<"i am static function "<<endl;
    }
    int i;
    Singleton(int x) : i(x) {
    cout<<"inside Constructor"<<endl;
    }
    void operator=(Singleton&);
    Singleton(const Singleton&);
    public:

    static Singleton& getHandle() {
        return s;
    }
    int getValue() { return i; }
    void setValue(int x) { i = x; }
};

Singleton Singleton::s(47);


int main() {

    Singleton& s = Singleton::getHandle();
    cout << s.getValue() << endl;
    Singleton& s2 = Singleton::getHandle();
    s2.setValue(9);
    cout << s.getValue() << endl;
}
4

2 回答 2

1

你不能。无论上下文如何,私有成员都是私有的。除了课堂内部,您无法从任何地方访问它们。

您所做的实际上并不是直接访问私有成员,而是使用公共函数返回对它的引用,然后可以使用该引用。函数中的代码main不访问私有成员m

于 2013-11-11T06:27:03.097 回答
1

Singleton除了访问私有静态变量之外,我看不到任何东西s

在 main 中,您有一个对恰好名为s的 Singleton 的引用,但这不是直接访问私有静态变量Singleton::s。您的方法Singleton::getHandle返回一个Singleton::s恰好绑定到sin main 的引用,但正如您所演示的,您可以将它绑定到 . 以外的其他内容s,例如s2.

线

Singleton Singleton::s(47);

正在定义(以及初始化)Singleton::s,但是如果您尝试引用Singleton::smain 内部,则会按预期得到错误。

于 2013-11-11T06:31:09.963 回答