注册 登录
编程论坛 C++教室

C++ :: 的问题

配角 发布于 2011-04-29 09:27, 312 次点击
老师上课讲迭代器 容器知识时的一小段代码
class TMyClass;
typedef list<TMyClass> TMyClass; // 用于存放对象的list容器
typedef list<TMyClass*> TMyClassPtrList; // 用于存放对象指针的list
TMyClass List::iterator it;
我想问的是最后一行,为什么要用 :: 而不是用 . 或者 ->。我知道在类外定义函数时要用到 :: ,但是在用对象调用函数时使用的是 . 或->。所以类比一下我觉得这里是在进行类似调用函数的操作,产生疑惑。
2 回复
#2
pangding2011-04-29 09:37
:: 表示域限定。
比如你写 std::cout 表示引用 名空间 std 中的 cout 对象。如果你有其它的名空间里也有 cout,就可以用 abc::cout 表示。
类似的道理,一个叫 list 的类里有 iterator 这个类型,那么就要用 list::iterator 表声明。如果另一个类 vector 里也有(事实上就是有),那么要用 vector::iterator 声明。可能是 iterator 你不熟悉,其实它是一个类型,类 list 也是。就像 int, double 之类的,不是对象。你总不会写 int.abc 这种代码吧。
你说的平时用于在类外定义函数的时候,其实就是在指定你在定义某个类的成员函数。

. 或者 -> 是用在对象上的。
比如我已经有一个 list 的对象了,那要用 list<int> ls 定义。一但定义好了,它就是一个对象,不是类型了。换句话说,它是一个类型的实体。它可以用 . 来引用成员。
如 ls.sort() 之类的。
-> 和它一样,只不过用于指针。
#3
配角2011-04-29 09:42
回复 2楼 pangding
谢谢  得解了
1