当需要在派生类中重新定义基类的方法时,应在基类方法前使用关键字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
本文深入探讨了C++中虚函数的使用方法及其在派生类中的重写技巧。通过对比加与不加virtual关键字的情况,展示了如何实现多态性,使派生类能够覆盖基类的方法,实现动态绑定,提高代码的灵活性和可维护性。
1118

被折叠的 条评论
为什么被折叠?



