class A
{
public:
virtual void out2(string s)
{
cout<<"A(out2):"<<s<<endl;
}
};
2.純虛函數(pure virtual) C++中包含純虛函數的類,被稱為是“抽象類”。抽象類不能使用new出對象,只有實現了這個純虛函數的子類才能new出對象。 C++中的純虛函數更像是“只提供申明,沒有實現”,是對子類的約束,是“接口繼承”。 C++中的純虛函數也是一種“運行時多態”。 如下面的類包含純虛函數,就是“抽象類”:
class A
{
public:
virtual void out1(string s)=0;
virtual void out2(string s)
{
cout<<"A(out2):"<<s<<endl;
}
};
3.普通函數(no-virtual) 普通函數是靜態編譯的,沒有運行時多態,只會根據指針或引用的“字面值”類對象,調用自己的普通函數。 普通函數是父類為子類提供的“強制實現”。 因此,在繼承關系中,子類不應該重寫父類的普通函數,因為函數的調用至於類對象的字面值有關。 4.程序綜合實例
#include <iostream>using namespace std;class A
{
public:
virtual void out1()=0; ///由子類實現
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;
}