C++纯虚函数和虚函数
时间: 2023-09-09 07:10:04 浏览: 113
在C++中,虚函数和纯虚函数都是用来实现多态性的特性。虚函数是在基类中声明为虚函数的成员函数,它可以被派生类重写,从而实现运行时多态。而纯虚函数是在基类中声明为纯虚函数的虚函数,它没有函数体,需要在派生类中重写实现,从而实现接口的统一。
具体而言,虚函数在基类中使用virtual关键字进行声明,派生类可以通过override关键字重写该虚函数。例如:
```c++
class Animal {
public:
virtual void makeSound() {
std::cout << "Animal makes a sound." << std::endl;
}
};
class Dog : public Animal {
public:
void makeSound() override {
std::cout << "Woof!" << std::endl;
}
};
int main() {
Animal *animal = new Dog();
animal->makeSound();
delete animal;
return 0;
}
```
在这个例子中,Animal类中的makeSound()函数被声明为虚函数,并且在Dog类中被重写。在main函数中,创建了一个Dog对象并将其赋值给Animal指针,然后调用了makeSound()函数,此时会调用Dog类中的makeSound()函数,因为它已经重写了Animal类中的makeSound()函数。
而纯虚函数在基类中使用virtual关键字和=0进行声明,子类必须实现该函数。例如:
```c++
class Shape {
public:
virtual double getArea() const = 0;
};
class Square : public Shape {
public:
double getArea() const override {
return width * width;
}
private:
double width;
};
int main() {
Shape *shape = new Square(5);
std::cout << "Area of square: " << shape->getArea() << std::endl;
delete shape;
return 0;
}
```
在这个例子中,Shape类中的getArea()函数被声明为纯虚函数,并且在Square类中被实现。在main函数中,创建了一个Square对象并将其赋值给Shape指针,然后调用了getArea()函数,此时会调用Square类中的getArea()函数,因为它已经实现了Shape类中的纯虚函数。
阅读全文