C++的代码,谁能给解释一下
现在需要执行这样一条语句:CC::Istc()->IniS();其中CC、Istc、IniS的定义都在下面了,本人菜鸟,着实看不太懂,请高人指点。类的定义以及在类外定义函...
现在需要执行这样一条语句:CC::Istc()->IniS();
其中CC、Istc、IniS的定义都在下面了,本人菜鸟,着实看不太懂,请高人指点。类的定义以及在类外定义函数,这些我是明白的,我不明白的是,“->”,感觉像是先执行了Istc()函数,然后执行的IniS()函数,各种不理解,求高手!!!
CC的定义:
class CC {
public:
~CC();
static CC * Istc();
int IniS();
private:
CC();
static CC *m_pIstc;
};
Istc的定义:
CC * CC::Istc() {
if (m_pIstc == NULL) {
m_pIstc = new CC;
}
return m_pIstc;
}
IniS的定义:
//comment: Initialize the GameServer
int CC::IniS() {
//此处代码省略。
} 展开
其中CC、Istc、IniS的定义都在下面了,本人菜鸟,着实看不太懂,请高人指点。类的定义以及在类外定义函数,这些我是明白的,我不明白的是,“->”,感觉像是先执行了Istc()函数,然后执行的IniS()函数,各种不理解,求高手!!!
CC的定义:
class CC {
public:
~CC();
static CC * Istc();
int IniS();
private:
CC();
static CC *m_pIstc;
};
Istc的定义:
CC * CC::Istc() {
if (m_pIstc == NULL) {
m_pIstc = new CC;
}
return m_pIstc;
}
IniS的定义:
//comment: Initialize the GameServer
int CC::IniS() {
//此处代码省略。
} 展开
3个回答
展开全部
Istc()是CC中的一个静态成员方法,说一不需要实例,可以直接用类名调用,即CC::Istc(),Istc()返回的是一个CC*(cc类的一个指针),所以在调用成员方法IniS()的时候就需要用“->”,即CC::Istc()->IniS();
Ps:"->" 这个是指针调用的符号。
Ps:"->" 这个是指针调用的符号。
追问
这种调用的方法,可不可以这样理解:先执行Istc()函数,如果之前没有定义一个CC类就定义一个CC类,已经定义了就不需要再定义了,然后执行在这个类上执行IniS()函数。这样调用的好处就是为了防止没有定义类?
展开全部
先执行了Istc()函数,返回CC *;用返回的那个指针直接调用niS();
这里
CC::Istc()->IniS();
相当于 CC * t=CC::Istc(); t->IniS();
CC:: 作用域运算符。
前面可以是名空间,或类名,结构名等。
也可以是空白代表唯一的全局名空间。
这是C++才有的,C是没有的,不知新标准里加入了没有。
类的静态函数,类的静态变量,或类内部调用基类的同名函数时使用
这里
CC::Istc()->IniS();
相当于 CC * t=CC::Istc(); t->IniS();
CC:: 作用域运算符。
前面可以是名空间,或类名,结构名等。
也可以是空白代表唯一的全局名空间。
这是C++才有的,C是没有的,不知新标准里加入了没有。
类的静态函数,类的静态变量,或类内部调用基类的同名函数时使用
追问
这种调用的方法,可不可以这样理解:先执行Istc()函数,如果之前没有定义一个CC类就定义一个CC类,已经定义了就不需要再定义了,然后执行在这个类上执行IniS()函数。这样调用的好处就是为了防止没有定义类?
追答
这里是一个所谓singleton模式,就是单件,是设计模式里的一种模式,就是一个类只生成一个唯一的实例对象,所有跟该类有关的操作只跟这一个对象打交道。必须通过类名调用而不是可以通过类名调用。它的构造函数是私有的外部不可以构造该对象!余下代码很好理解就不多说了!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是运算符优先级决定,请看参考连接。
在你这里,::域运算符和->是同一个优先级,但是结合顺序是从左至右,因此
CC::Istc()->IniS();
先执行
CC::Istc()
此时函数返回一个指向new出来的CC对象的指针,然后通过返回指针调用其成员函数IniS()
在你这里,::域运算符和->是同一个优先级,但是结合顺序是从左至右,因此
CC::Istc()->IniS();
先执行
CC::Istc()
此时函数返回一个指向new出来的CC对象的指针,然后通过返回指针调用其成员函数IniS()
追问
这种调用的方法,可不可以这样理解:先执行Istc()函数,如果之前没有定义一个CC类就定义一个CC类,已经定义了就不需要再定义了,然后执行在这个类上执行IniS()函数。这样调用的好处就是为了防止没有定义类?
追答
不是这样,::是域运算符,是定位函数的位置。
CC::Istc()就是说要调用的函数是CC类的成员函数,这是直接访问类静态成员函数的方法,也是为了防止派生类多个同名函数调用时的歧义,比如
class A
{
public:
int a(){return 0;}
};
class B:public A
{
public:
int a(){return 0;}
};
int main()
{
B b;
b.A::a();是指定调用类A里的函数a
b.a();是调用类B的成员函数a
return 0;
}
这里并非你说的防止没有定义类。
参考资料: http://blog.csdn.net/nicky_zs/article/details/4053146
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询