陌上而已吧 关注:28贴子:1,020
  • 9回复贴,共1

20151214 for C++

只看楼主收藏回复

this指针 abs函数 成员函数 静态函数 全局函数


1楼2015-12-14 16:10回复


    2楼2015-12-14 16:10
    回复
      2025-07-26 04:26:56
      广告
      不感兴趣
      开通SVIP免广告
      this指针:this指针只能在一个类的成员函数中调用,它表示当前对象的地址。
      1. this只能在成员函数中使用。
      全局函数,静态函数都不能使用this。
      2. 由此可见,this在成员函数的开始前构造的,在成员的结束后清除。
      这个生命周期同任一个函数的参数是一样的,没有任何区别。
      当调用一个类的成员函数时,编译器将类的指针作为函数的this参数传递进去。如:
      A a;
      a.func(10);
      此处,编译器将会编译成: A::func(&a, 10);
      嗯,看起来和静态函数没差别,对吗?不过,区别还是有的。编译器通常会对this指针做一些优化的,因此,this指针的传递效率比较高
      3. 回答
      #1:this指针是什么时候创建的?
      this在成员函数的开始执行前构造的,在成员的执行结束后清除。
      #2:this指针存放在何处? 堆,栈,全局变量,还是其他?
      this指针会因编译器不同,而放置的位置不同。可能是栈,也可能是寄存器,甚至全局变量。
      #3:this指针如何传递给类中函数的?绑定?还是在函数参数的首参数就是this指针.那么this指针又是如何找到类实例后函数的?
      this是通过函数参数的首参数来传递的。this指针是在调用之前生成的。类实例后的函数,没有这个说法。类在实例化时,只分配类中的变量空间,并没有为函数分配空间。自从类的函数定义完成后,它就在那儿,不会跑的。
      #4:this指针如何访问类中变量的/?
      如果不是类,而是结构的话,那么,如何通过结构指针来访问结构中的变量呢?如果你明白这一点的话,那就很好理解这个问题了。
      在C++中,类和结构是只有一个区别的:类的成员默认是private,而结构是public。
      this是类的指针,如果换成结构,那this就是结构的指针了。
      #5:我们只有获得一个对象后,才能通过对象使用this指针,如果我们知道一个对象this指针的位置可以直接使用吗?
      this指针只有在成员函数中才有定义。只有在成员函数里才有this指针的位置。在成员函数里,可以知道this指针的位置(可以&this获得),也可以直接使用。
      有些很明白 有些地方似懂非懂 先存着
      内容来自网络 侵删致歉


      3楼2015-12-14 16:15
      回复
        abs函数:
        Calculates the absolute value.The abs function returns the absolute value of its parameter.
        这句话应该是求参数绝对值?不过好像是求整数的绝对值


        4楼2015-12-14 16:16
        回复
          静态函数:
          函数调用的结果不会访问或者修改任何对象(非static)数据成员,这样的成员声明为静态成员函数比较好。
          静态函数如果是非成员函数(全局函数),在本文件内部调用的时候跟普通函数没有任何区别,但不允许在其他文件中调用。
          静态成员函数的声明除了在类体的函数声明前加上关键字static,以及不能声明为const或者volatile之外,与非静态成员函数相同。出现在类体之外的函数定义不能制定关键字static。
          静态成员函数没有this指针。
          ps:非静态函数如何调用静态函数
          静态函数在调用的时候没有什么特别的规则,直接调用就可以了。
          静态函数如果是成员函数,在本类的其它成员函数中调用时完全可以直接用函数名,也可以用“类名::”修饰函数名。
          来自网络 侵删致歉


          5楼2015-12-14 16:20
          回复
            类的成员函数:
            类的成员函数的原型要写在类体中,原型说明了函数的参数表和返回值类型。
            而函数的定义一般在类外面,也可以直接在类内部定义。前者与普通函数不同的是,实现成员函数时要指明类的名称,具体形式为:返回值类型 类名 ::函数成员名(参数表){函数体};
            而后者一般为一些短小的函数(5行以内),也就是内联函数。
            各类函数中:构造函数、析构函数、拷贝初始化构造函数等是类的成员函数。
            class A
              {
              public:
              void B();
              private:
              int C();
              protected:
              bool D(int i);
              };
              那么,B(),C(),D(int)都是A的成员函数


            6楼2015-12-14 16:22
            收起回复
              全局函数:
              全局函数就是可以被其他文件中函数调用,比如一个大型程序,由很多人来共同编写,每个人写的程序为一个文件,全局函数就可以被另一个文件中的程序调用,声明函数时不管写没写extern都默认为全局函数,如果不想被其他人调用,可以用static来定义,就只能被本文件程序调用全局函数是定义在类外的函数,成员函数就是定义在类中的函数。下面是定义的方法。
              //函数定义方法返回类型 函数名(形式参数表列)
              { 函数体语句 return 表达式;//void类型的return是没有的或者就是一个return;用来结束函数}
              //例如:定义一个返回char类型的一个叫plus的函数,传入一个参数char c;char plus(char c){ c=c+1; return c;}
              //函数声明方法返回类型 函数名(形式参数表列);
              //函数调用方法:函数名(实际参数表列);
              //举个栗子int main(void){
              char c = 'T';
              c = plus(c); //此时调用了plus函数
              std::cout << c << std::endl;
              return 0;}
              全局函数的关键字是extern通常不写函数extern的会默认为extern。


              7楼2015-12-14 16:27
              收起回复
                #include "iostream"
                using namespace std


                IP属地:黑龙江8楼2015-12-28 12:33
                回复