首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VC >

this 指针的迷茫,请进来看看!该如何处理

2012-02-23 
this 指针的迷茫,请进来看看!在孙老师的this指针问题基础上,又产生了新的迷茫!我在孙老师代码基础上,加了

this 指针的迷茫,请进来看看!
在孙老师的this   指针问题基础上,又产生了新的迷茫!

我在孙老师代码基础上,加了几行代码,下文以注释的方式作了说明,请帮助,为什么我这里

的this指针不能用?

#include   <iostream.h>
class   base;
base   *   pbase;
class   base
{
public:
              base()
              {
                            pbase=this;
                           
              }
       
              virtual   void   fn()
              {
                            cout < < "base " < <endl;
              }
};
class   derived:public   base
{

              void   fn()
              {
                            cout < < "derived " < <endl;
              }
public://我加的
void   output()//我加的
{
cout < < "调用this-> output()的输出   " < <endl;
}

};
derived   aa;
void   main()
{

              pbase-> fn();//问题1:为什么这里可以调用私有成员函数?仔细看孙老师的解释,明白了!
       
      //   aa.fn();//我加的:这里不能调用私有成员函数,是对的!
        aa.output();//我加的。我理解,在调用这个函数后,
        //函数会自动返回一个代表对象aa的地址的this指针
       
    //     this-> output();//问题2:我理解的这个this指针代表aa对象的地址,此语句应该是正确的,
      //   可是它不能通过编译,难道我理解的this指针不对吗?很多书上都这么讲的啊!
      //请各位高手指教!谢谢!  
}



[解决办法]
this 指针只能在类的非静态函数里用

[解决办法]
一般的类中的成员都有 this 指针,但静态成员就没有。
静态函数如 static void fn() { .... } 在类中,静态函数是没有this指针的


编译LZ的程序,带( this-> output() ) 出的错误
error C2673: 'wmain ' : global functions do not have 'this ' pointers
error C2227: left of '-> output ' must point to class/struct/union/generic type

上面的两个错误可以看出,全局函数是没有 this 指针的。
而第二个错误,是讲,指针的左值 应该为 类/结构体/联合/普通  类型。。
[解决办法]
this指针不能在类外使用(类内部也不能在静态函数中被使用)
这里的output函数当然不是静态的,你自己写的代码呀
[解决办法]
main()函数是个静态函数,没有this指针,所以你在main函数里面调用this编译通不过。
[解决办法]
this就是字面意思。自己当前对象。你是不是以前做c#或者java的?c++是有全局函数的。


类的成员函数里,用this表示当前的对象自己,可以引用自己的所有成员变量和成员函数。(当然,如果继承关系,不可以调用父类的private修饰的变量和函数)

这里的void main和c#中的
public static void main()
不同的,c#中没有全局函数。你那个main是属于某个类的静态方法,你可以用this来访问类静态方法的。这个c++中main是全局函数,不属于任何一个类的。

热点排行