class Test{
public:
static int i;
};
int Test::i=0;
如果我制作测试t1,t2,t3的3个对象。这有可能实现只有t1可以使用点运算符访问我吗?
答案 0 :(得分:0)
你不能超载点运算符,所以不,简单的回答是你无法做你想要的。你可以“隐藏”getter \ setter后面的字段并实现它们,这样就可以使用bool标志作为参数使类成为模板,然后进行专门化。
// This is NOT working example
template <bool _bFlag> class Test
{
protected:
static int i;
public:
int geti() { return I;}
};
template <> class Test<true>
{
protected:
static int i;
public:
int geti() { return i;}
};
template <> class Test<false>
{
protected:
static int i;
int geti() { return i;} // inaccessible from outside
};
好的,这里有问题..不同的专业化将是不同的类,它们会有不同的静态成员。所以我们应该声明基类。
class TestBase
{
protected:
static int i;
};
template <bool _bFlag> class Test : public TestBase
{
public:
int geti() { return i;}
};
template <> class Test<true> : public TestBase
{
public:
int geti() { return i;}
};
template <> class Test<false> : public TestBase
{
protected:
int geti() { return i;} // inaccessible from outside
};
int main()
{
Test<true> t1;
Test<false> t2, t3;
//int i = t2.geti(); // error
}
这种绒毛是否真的花费了设计时间(以及作者的隐藏,当它被代码评论员删除时)?
答案 1 :(得分:0)
不,没有办法做到这一点。 var annot= Map.createAnnotation({
latitude: XXXXXXXXXXX,
longitude: XXXXXXXXXX,
title: 'myPlace',
image: 'myPin.png',
width:'100dp',// doesn't work
height:'100dp'// doesn't work
});
this.mapView.addAnnotation(annot);
}
变量独立于对象而存在,当它是公共的时,每个人都可以访问它。
static
你真的想要实现什么?如果你想拥有一个只能由一个实例访问的成员变量,这很可能,但是使变量int x = Test::i; // <- no object of Test needed at all to access i
成为错误的方向。