名字覆盖问题与命名规范

74 阅读1分钟

this ->是可以省略的
为了让代码更简洁,this->是可以省略的。编译器会自己给它加上this->.

class Object
{
    public:
        int x;
        int y;
    public:
        int Add()
        {
            return x+y;//相当于this->x+this->y
        }
        void Test()
        {
            printf("Sum:%d\n",Add());//相当于this->Add();
        }
};

重名问题:就近原则
(1)在成员函数里:当局部变量与成员变量重名时,该变量指向的是局部变量。

class Object
{
    public:
        int x;
        void Test(int x)
        {
            printf("x=%d\n",x);//最近的:函数内定义的x
        }
};

如果要指定成员变量x,则必须加上this->的规定
(2)在成员函数里,当成员变量与全局变量重名时,该变量指向的是成员变量

int x=10;//全局变量
class Object
{
    publicint x;
        void Test(int x)
        {
            printf("x=%d\n",x);//最近的x:成员变量x
        }
};

注:如果要指定全局变量x,则必须加上::x
(3)在成员函数与全局函数重名时,默认指成员函数::全局符号