- virtual function:
- abstract class: 擁有 pure virtual function 的類別,該類別只能被繼承,不能產生實例
- pure virtual function:指定函式只能提供一個介面,由子類別繼承,重新定義
- polymorphic class:擁有多個 virtual functions
- redefinition ,overriding差別:
- redefinition(重新定義):不限制為虛函數,在衍生類別中,重新定義子函式
- overriding(複寫):重定的對象是virtual function就為override,若想要複寫基礎類別而不是繼承別人的話,用override,若不想被繼承,用final,用來避免虛擬函式被複寫
- 編譯器還為每個類別加上一個VTABLE,VPTR指向VTABLE的開頭。 VTABLE 紀錄了基礎類別內被宣告為 virtual function 的成員函數。
- 若沒overriding,就記錄基礎類別的位址
- 解構時必須把解構函數宣告成virtual function ,才能釋放 VPTR VTABLE,否則memory leak
- Pointer&Reference:
void swap (int *c , int *d){
int temp=*c;
*c=*d;
*d=temp; "做deference,對指定位址的值做交換"
}
int main(){
int a=5,b=10;
swap(&a,&b);
printf(" %d %d ", a,b);
}
p1=new int;p2=new int; *p1=0;p2=0;p2=p1;//deference 直接指值是被允許的,bc有allocate memory *p2=1;*p1=3;p1=0; //p1已經被p2定址到0身上了,所以p1已有定址,但是,由於定址後不能再改變位址,p1=0及不成立, 雖然都為零,但是為重複定義,就會出現錯誤
(就算彼此層層相扣,環環相護,private就是不能動)
|