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是全局函数,不属于任何一个类的。