即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

this指针的运用

编程语言 perfectguyipeng 9℃ 0评论

       下面是一段关于this指针的代码,可以自己先想想输出的结果是什么,如果取消第14行的注释,输出的又是什么?

#include 
using namespace std ;

class myclass
{
public:
 int data ;
 myclass(int data )
 {
      this -> data  ;
 }
 void print()
 {
      //cout<print() ;
 pmyclass[0].print() ;
 pmyclass[1].print() ;
 pmyclass[10000000].print() ;

 return 0 ;
}




      在这里呢,我们需要明白类函数是如何被编译以及如何被执行的。

      对于类成员函数而言,并不是一个对象对应一个单独的成员函数体,而是此类的所有对象共用这个函数体。当程序被编译后,此成员函数地址即已确定。我们经常会认为调用类成员函数时,会将当前对象的this指针传给成员函数,没有错,一个类的成员函数体只有一份,而成员函数之所以能把属于此类的各个对象的数据区分开,就在于每次执行类成员函数时,都会把当前对象的this指针(对象首地址)传入成员函数,函数体内所有对类数据成员的访问,都会被转化为this->数据成员的方式。

      如果print函数里没有访问对象的任何数据成员,那么此时传进来的对象this指针实际上是没有任何用处。这样的函数,其特征与全局函数并没有太大的区别。但如果取消第14行的注释,由于print函数要访问类的数据成员data,而类的数据成员是伴随着对象声明而产生的。但是我们只new了一个myclass,显然,下标‘1’和下标‘10000000’的myclass对象根本不存在,那么对他们的数据成员访问也是非法的。




答案:

(1)注释代码第14行时的输出:

        hello!
 hello!
 hello!
 hello!




(2)取消代码第14行时的输出:

        1
        hello!
 1
 hello!
 -33686019
 hello!
 段错误










转载请注明:CodingBlog » this指针的运用

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情