虛函數聯系到多态,多态聯系到繼承。是以本文中都是在繼承層次上做文章。沒了繼承,什麼都沒得談。
下面是對C++的虛函數這玩意兒的了解。
一, 什麼是虛函數(如果不知道虛函數為何物,但有急切的想知道,那你就應該從這裡開始)
簡單地說,那些被virtual關鍵字修飾的成員函數,就是虛函數。虛函數的作用,用專業術語來解釋就是實作多态性(Polymorphism),
多态性是将接口與實作進行分離;用形象的語言來解釋就是實作以共同的方法,但因個體差異而采用不同的政策。下面來看一段簡單的代碼
class A{
public:
void print(){ cout<<”This is A”<<endl;}
};
class B:public A{
public:
void print(){ cout<<”This is B”<<endl;}
};
int main(){ //為了在以後便于區分,我這段main()代碼叫做main1
A a;
B b;
a.print();
b.print();
}
int main(){ //main2
A a;
B b;
A* p1=&a;
A* p2=&b;
p1->print();
p2->print();
}
class A{
public:
virtual void print(){ cout<<”This is A”<<endl;} //現在成了虛函數了
};
class B:public A{
public:
void print(){ cout<<”This is B”<<endl;} //這裡需要在前面加上關鍵字virtual嗎?
};
毫無疑問,class A的成員函數print()已經成了虛函數,那麼class B的print()成了虛函數了嗎?