C++中,主函数里没有定义对象的时候能使用this指针吗
1个回答
展开全部
this指针在类的非静态成员函数里面才能使用,main函数里是不能使用的!
追问
我的意思是this指针不是指向类的对象的指针吗,没有创建对象的话,这个this是不是就无所指了,就没用了?
而且,为什么要在类的非静态成员函数中使用this指针呢?既然是系统自动加上去的,就谈不上编程者自己使用了吧?
另外,还有那种函数最后“return this”的用法也不知道作用体现在哪呢?
谢谢!
追答
this指针是在非static成员里面才能使用,这是因为非static成员函数需要依赖于当前对象才能调用,而static成员函数只需类就可以调用了。
没有创建对象的话,这个this是不是就无所指了,就没用了?
事实上,你没创建对象的话,根本就不存在this指针.
为什么要在类的非静态成员函数中使用this指针呢?
this指针的目的是让程序员引用调用当前成员函数(非static)的对象,static成员函数的调用时不需要依赖当前对象的,所以static成员函数里面是没有this指针的,也就不能使用this。
函数最后“return this”的用法也不知道作用体现在哪呢?
一般是返回引用“return *this; ”,这个是返回当前对象的引用。看看下面的代码:
class Test {
public:
Test & Run() {
std::cout << a << std::endl;
return *this;
}
private:
int a = 0;
};
int main() {
Run r;
r.Run().Run().Run(); // 每次调用Run都能获得一个Test&,有了Test& 你又可以再次调用Run。
std::cout << "abc" << 2 << std::endl; // std::cout 这里的<<连用和上面是同样的道理。
}
this指针在实现上是作为非静态成员函数的一个隐藏参数。
上面定义的Run函数,它实际的定义可以看成这样的:
Test &Run( Test *this ) {
std::cout << this->a << std::endl;
return *this;
}
上面的调用语句可以看成这样:
Run t;
Run( &Run( &Run( &t ) ) );
std::cout << "abc" << 2 << std::endl;
当然this指针的传递是编译器帮你传的,所以写代码的时候是不需要你传递this指针的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询