c++中virtual和非virtual函数的区别
在C++中,virtual和非virtual函数的区别在于是否支持多态。本文将详细讲解virtual和非virtual函数的区别,包括两个示例。
virtual函数
在C++中,virtual函数是支持多态的函数。当一个类中的函数被声明为virtual时,它可以被子类重写,从而实现多态。以下是一个使用virtual函数的示例:
#include <iostream>
using namespace std;
class Shape {
public:
virtual void draw() {
cout << "Drawing Shape" << endl;
}
};
class Circle: public Shape {
public:
void draw() {
cout << "Drawing Circle" << endl;
}
};
int main() {
Shape *shape;
Circle circle;
shape = &circle;
shape->draw();
return 0;
}
在上面的示例中,首先定义了一个Shape类,其中的draw
被声明为virtual。然后,定义了一个Circle类,它继承自Shape类,并重写了draw
函数。在main
函数中,创建了一个Circle对象,并将其赋值给一个Shape指针。最后,调用了Shape指针的draw
函数,实现了多态。
非virtual函数
在C++中,非virtual函数是不支持多态的函数。当一个类中的函数没有被声明为virtual时,它不能被子类重写,从而无法实现多态。以下是一个使用非virtual函数的示例:
#include <iostream>
using namespace std;
class Shape {
public:
void draw() {
cout << "Drawing Shape" << endl;
}
};
class Circle: public Shape {
public:
void draw() {
cout << "Drawing Circle" << endl;
}
};
int main() {
Shape *shape;
Circle circle;
shape = &circle;
shape->draw();
return 0;
}
在上面的示例中,定义了一个Shape类,其中的draw
函数没有被声明为virtual。然后,定义了一个Circle类,它继承自Shape类,并重写了draw
函数。在main
函数中,创建了一个Circle对象,并将其赋值给一个Shape指针。最后,调用了Shape指针的draw
函数,于draw
函数不是virtual函数,因此调用的是Shape类中的draw
函数,而不是Circle类中的draw
函数。
总结
本文详细讲解了C++中virtual和非virtual函数的区别,包括支持多态和不支持多态两种情况。通过本文的学习,读者可以了解C++中如何使用virtual函数实现多态。