你可以試試,發(fā)生什么了。然后把base里print()前的virtual去掉,看看又是什么結(jié)果。
要說的是“&”,在這里是取地址符,而不是引用!“pb = & b;”的意思就是把指針pb指向基類base的對象b。
虛函數(shù)是多態(tài)的基礎(chǔ)。在這里,pb指向了不同的類的對象,表現(xiàn)出了不同的形態(tài),就實現(xiàn)了多態(tài)。
這種例子很多了,比如我們都會笑,但大家笑的神態(tài)都是不同的,有哈哈大笑,有微笑,有訕笑,陰險的笑,還有恥笑(不知道算不算)。
我們會跑,但人不是跑的最快的,許多動物跑的都很快,比如馬(因為他們四條腿!):
class animal
{
public
virtual void run() {}
};
class people : virtual public animal
{
public
{
span lang="EN-US"> void run() {cout << "I could run!" << endl;}
};
class horse : virtual public animal
{
public
void run() {cout << "I run faster than man!" << endl;}
};
Animal類里的run()什么也沒做,完全沒必要寫出來。為此,我們發(fā)明了純虛函數(shù):
class animal
{
public:
virtual void run() = 0;
};
class people : virtual public animal
{
public:
void run() {cout << "I could run!" << endl;}
};
class horse : virtual public animal
{
public:
void run() {cout << "I run faster than man!" << endl;}
};
void main()
{
animal *pb;
// animal b;
people gs;
horse d1;
// pb = & b;
// pb->run();
pb = & gs;
pb->run();
pb = & d1;
pb->run();
}
除了在你想變?yōu)樘摵瘮?shù)的函數(shù)前加virtual外,后面再加上“ lang="EN-US">= 0”,這樣他就是一個純虛函數(shù)了。
帶有純虛函數(shù)的類就成為抽象類:不能實例化,只能被繼承。
所以我加注釋那三句話加進去會報錯的。
至此,c++面向?qū)ο蟮膬?nèi)容就講完了。還有很多零散的內(nèi)容,比如const,&,static,new與delete,等等,我不想講了,但我的日志還沒寫完,c++很重要的內(nèi)容:stl,是不得不說的。
相關(guān)推薦:如何備考等考C++與面向?qū)ο螅憾嘀乩^承北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |