虚函数
时间: 2023-08-28 15:18:29 浏览: 36
虚函数是在基类中使用virtual关键字声明的成员函数,它可以被派生类重写并按照派生类的实际类型进行调用。简单来说,虚函数就是为了实现多态性而存在的。
当基类指针指向派生类对象并调用虚函数时,实际调用的是派生类中的函数,而不是基类中的函数。这种行为被称为动态绑定,它允许在运行时根据对象的实际类型来决定调用哪个函数。
虚函数的声明格式为:
```
virtual 返回值类型 函数名(参数列表) = 0;
```
其中,`= 0`表示这个虚函数是纯虚函数,它没有在基类中实现,必须在派生类中重新实现。如果一个类包含了纯虚函数,那么这个类就是抽象类,不能实例化对象,只能用于派生出其他类。
相关问题
C++虚函数
C++中的虚函数是一种特殊的成员函数,它可以被子类重写(覆盖),并且在运行时根据对象实际类型调用相应的函数,实现多态性。
在类中声明一个虚函数,需要在函数前面加上关键字virtual,例如:
```
class Animal {
public:
virtual void speak() {
cout << "Animal is speaking." << endl;
}
};
class Dog : public Animal {
public:
void speak() {
cout << "Dog is barking." << endl;
}
};
```
在这个例子中,Animal类中的speak()函数被声明为虚函数,子类Dog中也定义了一个同名的speak()函数。当我们用一个Animal类型的指针指向一个Dog对象时,调用speak()函数会根据实际类型来动态绑定,即调用Dog类中的speak()函数。
```
Animal *animal = new Dog;
animal->speak(); // 输出:Dog is barking.
```
需要注意的是,虚函数只能存在于类的成员函数中,不能存在于全局函数或静态函数中。另外,虚函数的实现需要通过虚函数表来实现,因此会增加一定的开销。
c++虚函数
C++中的虚函数是一种特殊的成员函数,它可以在派生类中被重写。在基类中声明一个函数为虚函数,可以使得该函数在其任何派生类中被重写,从而实现多态性。
使用虚函数的步骤如下:
1. 在基类中声明虚函数,使用关键字“virtual”修饰该函数。
2. 在派生类中重新定义该虚函数,并使用相同的函数签名(即函数名、参数列表和返回类型)。
3. 创建基类指针,并将其指向派生类对象。
4. 调用虚函数时,根据指针指向的对象类型来调用相应的函数。
以下是一个简单的示例:
```c++
class Shape {
public:
virtual void draw() {
std::cout << "Drawing a shape." << std::endl;
}
};
class Circle : public Shape {
public:
void draw() {
std::cout << "Drawing a circle." << std::endl;
}
};
int main() {
Shape* shapePtr = new Circle();
shapePtr->draw(); // 输出 "Drawing a circle."
delete shapePtr;
return 0;
}
```
在上面的例子中,Shape类中的draw()函数被声明为虚函数,Circle类中重新定义了该函数。在主函数中,创建了一个Shape类型的指针,并将其指向一个Circle对象。当调用shapePtr->draw()时,由于shapePtr指向的对象是Circle类型,因此将调用Circle类中的draw()函数。