锘?!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1.铏氬嚱鏁?impure virtual)
銆銆C++鐨勮櫄鍑芥暟涓昏浣滅敤鏄滆繍琛屾椂澶氭佲濓紝鐖剁被涓彁渚涜櫄鍑芥暟鐨勫疄鐜幫紝涓哄瓙綾繪彁渚涢粯璁ょ殑鍑芥暟瀹炵幇銆?/p>
銆銆瀛愮被鍙互閲嶅啓鐖剁被鐨勮櫄鍑芥暟瀹炵幇瀛愮被鐨勭壒孌婂寲銆?/p>
銆銆濡備笅灝辨槸涓涓埗綾諱腑鐨勮櫄鍑芥暟錛?/p>
澶嶅埗浠g爜
class A
{
public:
virtual void out2(string s)
{
cout<<"A(out2):"<<s<<endl;
}
};
澶嶅埗浠g爜
2.綰櫄鍑芥暟(pure virtual)
銆銆C++涓寘鍚函铏氬嚱鏁扮殑綾伙紝琚О涓烘槸鈥滄娊璞$被鈥濄傛娊璞$被涓嶈兘浣跨敤new鍑哄璞★紝鍙湁瀹炵幇浜嗚繖涓函铏氬嚱鏁扮殑瀛愮被鎵嶈兘new鍑哄璞°?/p>
銆銆C++涓殑綰櫄鍑芥暟鏇村儚鏄滃彧鎻愪緵鐢蟲槑錛屾病鏈夊疄鐜扳濓紝鏄瀛愮被鐨勭害鏉燂紝鏄滄帴鍙g戶鎵庫濄?/p>
銆銆C++涓殑綰櫄鍑芥暟涔熸槸涓縐嶁滆繍琛屾椂澶氭佲濄?/p>
銆銆濡備笅闈㈢殑綾誨寘鍚函铏氬嚱鏁幫紝灝辨槸鈥滄娊璞$被鈥濓細
澶嶅埗浠g爜
class A
{
public:
virtual void out1(string s)=0;
virtual void out2(string s)
{
cout<<"A(out2):"<<s<<endl;
}
};
澶嶅埗浠g爜
3.鏅氬嚱鏁?no-virtual)
銆銆鏅氬嚱鏁版槸闈欐佺紪璇戠殑錛屾病鏈夎繍琛屾椂澶氭侊紝鍙細鏍規嵁鎸囬拡鎴栧紩鐢ㄧ殑鈥滃瓧闈㈠尖濈被瀵硅薄錛岃皟鐢ㄨ嚜宸辯殑鏅氬嚱鏁般?/p>
銆銆鏅氬嚱鏁版槸鐖剁被涓哄瓙綾繪彁渚涚殑鈥滃己鍒跺疄鐜扳濄?/p>
銆銆鍥犳錛屽湪緇ф壙鍏崇郴涓紝瀛愮被涓嶅簲璇ラ噸鍐欑埗綾葷殑鏅氬嚱鏁幫紝鍥犱負鍑芥暟鐨勮皟鐢ㄨ嚦浜庣被瀵硅薄鐨勫瓧闈㈠兼湁鍏熾?/p>
4.紼嬪簭緇煎悎瀹炰緥
澶嶅埗浠g爜
#include <iostream>
using namespace std;
class A
{
public:
virtual void out1()=0; ///鐢卞瓙綾誨疄鐜?/p>
virtual ~A(){};
virtual void out2() ///榛樿瀹炵幇
{
cout<<"A(out2)"<<endl;
}
void out3() ///寮哄埗瀹炵幇
{
cout<<"A(out3)"<<endl;
}
};
class B:public A
{
public:
virtual ~B(){};
void out1()
{
cout<<"B(out1)"<<endl;
}
void out2()
{
cout<<"B(out2)"<<endl;
}
void out3()
{
cout<<"B(out3)"<<endl;
}
};
int main()
{
A *ab=new B;
ab->out1();
ab->out2();
ab->out3();
cout<<"************************"<<endl;
B *bb=new B;
bb->out1();
bb->out2();
bb->out3();
delete ab;
delete bb;
return 0;
}
澶嶅埗浠g爜