首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ 如何可以这样子写

2013-11-21 
C++ 怎么可以这样子写?本帖最后由 vipygd 于 2013-11-20 20:35:37 编辑/*#include iostreamusing namesp

C++ 怎么可以这样子写?
本帖最后由 vipygd 于 2013-11-20 20:35:37 编辑

/*
#include <iostream>
using namespace std;

class Singleton
{
public:
static Singleton *GetInstance()
{
return const_cast<Singleton *>(m_Instance);
}

void Show()
{
cout<<m_Test<<endl;
}

private:
Singleton(){ m_Test = 10; }
static const Singleton *m_Instance;
int m_Test;
};

const Singleton *Singleton::m_Instance = new Singleton();

可以看到,在Singleton中,构造函数是private的,怎么还可以在外部进行new Singlton操作?求解释。
[解决办法]
const Singleton *Singleton::m_Instance = new Singleton();
这个你竟然认为是在类的外面?
Singleton:: 这么大的东西你能没看见?
[解决办法]
引用:
Quote: 引用:

lz,你需要搞清楚类中定义静态变量,那你要在什么地方进行初始化呢??  类的静态变量是需要在类的外部进行初始化的哦!!!

是的,这个我知道的,我是在外部进行初始化的。现在我是使用new Singleton()进行初始化的,但是Singleton的构造函数是private的,既然是private的,为什么在外部能进行new操作呢?


你的误解在于,以为{}之外就是类外。
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

lz,你需要搞清楚类中定义静态变量,那你要在什么地方进行初始化呢??  类的静态变量是需要在类的外部进行初始化的哦!!!

是的,这个我知道的,我是在外部进行初始化的。现在我是使用new Singleton()进行初始化的,但是Singleton的构造函数是private的,既然是private的,为什么在外部能进行new操作呢?


你的误解在于,以为{}之外就是类外。

那是?能说明白点吗?

五楼已经解释了。
[解决办法]
静态成员的初始化表达式,要是有 ClassName:: 的限定,那么就是Class作用域。你认为下面的g()调用的是哪个?

int g() { printf("::g()\n"); return 0; }

class Foo { 
    static int n; 
    static int g() { printf("Foo::g()\n"); return 1; }
};

int Foo::n = g();



热点排行