当需要在派生类中重新定义基类的方法时,应在基类方法前使用关键字virtual,而派生类重新定义的方法自动被继承为虚方法,不过可以加上virtual前缀进行限定,以便区分派生类的哪些方法是虚方法。
不加virtual
#include<iostream>
using namespace std;
class instrument{
public:
void play()
{
cout<<"instrument"<<endl;
}
};
class violin:public instrument{
public :
void play(){
cout<<"violin"<<endl;
}
};
class piano:public instrument{
public:
void play(){
cout<<"piano"<<endl;
}
};
int main(){
violin v1;
piano p1;
instrument A;
A=v1;
A.play();
A=p1;
A.play();
cout<<".........."<<endl;
instrument *B;
B=&v1;
B->play();
B=&p1;
B->play();
}
instrument
instrument
…
instrument
instrument
加virtual
#include<iostream>
using namespace std;
class instrument{
public:
virtual void play()
{
cout<<"instrument"<<endl;
}
};
class violin:public instrument{
public :
void play(){
cout<<"violin"<<endl;
}
};
class piano:public instrument{
public:
void play(){
cout<<"piano"<<endl;
}
};
int main(){
violin v1;
piano p1;
instrument A;
A=v1;
A.play();
A=p1;
A.play();
cout<<".........."<<endl;
instrument *B;
B=&v1;
B->play();
B=&p1;
B->play();
return 0;
}
instrument
instrument
…
violin
piano