c++中的“::“和”.“有什么区别?

来源:百度知道 编辑:UC知道 时间:2024/06/14 17:51:52
c++中的“::“和”.“有什么区别?
在类的继承里面威什么只能用”类名::成员名“而不能用”类名.成员名“?

双冒号“::”用在没有实例化类对象的时候直接从类接口访问内部成员的情况下。比如定义一个MyClass类,其中有myfunc1()这个public static方法,那么你可以使用MyClass::myfunc1()来调用myfunc1()。

单点“.”用在已经存在实例化的类对象的时候从类的实例访问类内部成员的情况下。比如同上定义的MyClass类,其中又有一个myfunc2()这个public方法,此时如果有一个MyClass类型的变量mycls,那么可以使用mycls.myfunc2()直接调用myfunc2()方法。

类的继承中只能用双冒号是因为在继承类的时候只有一个类的定义,而此定义并没有被实例化(即没有被声明成某个变量),如上所述,在没有实例化的情况下只能使用双冒号来访问类成员。
这同时也是为什么在类中定义的类全局变量只能在类定义域之外使用双冒号来赋予初始值而不能在类定义域内部直接初始化的原因。

通常来说.左边是对象->左边是指针如果class重载了-> 那就不一样了

.的左边是一个对象
继承时就不能用.了,那样的话,子类的成员会覆盖父类的成员,导致你得不到你想要的调用
如果你想要调用父类的成员就要显未的说明你要调用的函数
这样可以用父类:成员来调用了

前者是域标识符后者是成员点操作符

::这个是作用域运算符,位于类名与成员函数之间
而.是成员访问符用来访问一个类的成员函数或变量

一句话,::只能加在类名后面,.只能加在类或结构体变量名后面