C++中,主函数里没有定义对象的时候能使用this指针吗

 我来答
帐号已注销
2016-11-01 · TA获得超过3954个赞
知道大有可为答主
回答量:1636
采纳率:77%
帮助的人:1241万
展开全部
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指针的。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式