當在 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
}
沒有留言:
張貼留言