这个和类之间的c ++类差异::

时间:2016-09-28 11:44:06

标签: c++

我的理解是,如果我有一个班级

class MyClass {
    public:
        MyClass();
        void SetVal( int );
    private:
        int val_;
}

我可以引用一个成员

MyClass::SetVal( int val ) { val_ = val }

MyClass::SetVal( int val ) { MyClass::val_ = val }

MyClass::SetVal( int val ) { this->val_ = val }

我喜欢指出变量是类成员的想法。 第二种和第三种方法之间有什么区别吗?

编辑:将SetVal(int)设为公开。写下这个例子是草率的。谢谢你指出

3 个答案:

答案 0 :(得分:3)

(大概在现实生活中你标记SetVal publicprotected。)

在你的特定情况下绝对没有区别,尽管我val_ = val充满了它,因为它是最清晰的。请注意,this->是重言式。

请注意,您可以使用MyClass::val_表示法来区分具有同名类成员的基类和子类 shadowed 的类成员。

答案 1 :(得分:3)

实际上有区别!......它是一个name lookup的东西

此,

MyClass::SetVal( int val ) { val_ = val }

执行unqualified name lookup。首先在类范围内首先搜索val_,如果找不到, name-lookup 将继续搜索全局 namespace 以查找val_example here

此,

MyClass::SetVal( int val ) { MyClass::val_ = val }

执行qualified name lookup。其中val_严格限于class namespace。所以如果你没有这样的成员val_,它就不会进一步搜索全局命名空间。另一个example here

此,

MyClass::SetVal( int val ) { this->val_ = val }

类似于第二个。 example here

答案 2 :(得分:0)

Layer

这用于'静态' (未在您的示例中使用)。静态对于类的所有实例都是通用的。说实话,使用propper声明ClassName :: isn不需要,但仍然可以接受。

MyClass::SetVal( int val ) { MyClass::val_ = val }

你可以使用它来访问实例字段val_,尽管单词' this'不是必需的