c++的virtual
时间: 2023-07-23 12:16:30 浏览: 44
在 C++ 中,`virtual` 关键字用于实现多态性,即通过基类指针或引用访问派生类对象的成员函数。当使用 `virtual` 关键字声明基类函数时,可以在派生类中重写该函数,使得基类指针或引用在调用该函数时能够正确地调用派生类的函数。如果没有使用 `virtual` 声明基类函数,则通过基类指针或引用调用该函数时只会执行基类自己的函数,而不会调用派生类的函数。
以下是一个使用 `virtual` 实现多态性的示例:
```c++
class Shape {
public:
virtual void printInfo() {
std::cout << "This is a shape." << std::endl;
}
};
class Rectangle : public Shape {
public:
void printInfo() override {
std::cout << "This is a rectangle." << std::endl;
}
};
class Circle : public Shape {
public:
void printInfo() override {
std::cout << "This is a circle." << std::endl;
}
};
int main() {
Shape* p;
Shape s;
Rectangle r;
Circle c;
p = &s;
p->printInfo(); // 输出:This is a shape.
p = &r;
p->printInfo(); // 输出:This is a rectangle.
p = &c;
p->printInfo(); // 输出:This is a circle.
return 0;
}
```
在上面的示例中,我们定义了一个基类 `Shape` 和两个派生类 `Rectangle` 和 `Circle`,它们都重写了基类中的 `printInfo` 函数。在 `main` 函数中,我们使用基类指针 `p` 分别指向基类对象 `s`、派生类对象 `r` 和 `c`,通过调用 `p->printInfo()` 实现多态性,输出了不同的信息。注意,在基类中声明函数时需要使用 `virtual` 关键字,而在派生类中重写函数时需要使用 `override` 关键字。