2020年11月3日 星期二

C++ 在 static 函數內使用本體

當在 class 裏面放置一個 static 函數時, 其實它只算是一個符號聯結, static 的函數實體會搬離到類型之外, 同時它已俱備唯一的函式本體,可以被呼叫, 但無法在 static 函式裏面使用 this 指標, 主因是它已脫離類型的範疇(out of scope), 但可以透過參數傳遞的方式, 利用別名 &變數, 或是指標 * 變數接收類型的本體(instance), 例如:

class  A_new_Class {

      int    aVar = 10;

      int    bVar = 5;

      static   void  function_with_instance(A_new_Class  &this_instance){

         printf("%d\n",  this_instance.aVar);// ok, it's  a parameter of instance's alias

          // printf("%d\n",  *this.aVar); // compile error!  this is invalid

      }

      static   void  function_with_this(A_new_Class  *this_pointer){

         printf("%d\n",  this_pointer -> bVar);// ok, it's a parameter of pointer

        // printf("%d\n",  this -> bVar); // compile error!  this is invalid

      }

    void call_function_with_this( ) {

            function_with_this(this); // call static function to use 'this' pointer

    } 

   void call_function_with_this_instance( ){

           function_with_instance(*this); // call static function to use 'this' instance

  }

      A_new_Class ( ){

          printf("instance of A\n");

      }

} ;


int main( ){

     class a;  // instance of A

     a.function_with_instance(a);// 10

     a.call_function_with_this_instance( );// 10


     a.function_with_this(&a);  // 5

     a.call_function_with_this( );  // 5

}


     

沒有留言:

張貼留言

Linux mint 玩 waydroid 一些心得

1. 目前使用 linux mint 22.1 作業系統可以順利跑起來, 可上官網去下載, 並安裝到硬碟. 2. 安裝 waydroid 可上網站  https://docs.waydro.id 參考看看:    https://docs.waydro.id/usage/inst...