c++中实现多态的方法
时间: 2024-04-22 20:24:10 浏览: 112
在C++中,可以通过以下几种方式来实现多态:
1. 虚函数(virtual functions):在基类中声明虚函数,并在派生类中重写这些虚函数。通过基类指针或引用调用虚函数时,实际上会调用派生类中重写的函数。
例如:
```cpp
class Base {
public:
virtual void func() {
cout << "Base::func()" << endl;
}
};
class Derived : public Base {
public:
void func() override {
cout << "Derived::func()" << endl;
}
};
int main() {
Base* ptr = new Derived();
ptr->func(); // 输出:Derived::func()
delete ptr;
return 0;
}
```
2. 纯虚函数(pure virtual functions)和抽象类(abstract class):在基类中声明纯虚函数,即函数没有实现,派生类必须重写这些纯虚函数才能被实例化。基类中包含至少一个纯虚函数的类称为抽象类,不能直接创建抽象类的对象。
例如:
```cpp
class Shape {
public:
virtual void draw() = 0; // 纯虚函数
};
class Circle : public Shape {
public:
void draw() override {
cout << "Drawing a circle" << endl;
}
};
int main() {
Shape* shape = new Circle();
shape->draw(); // 输出:Drawing a circle
delete shape;
return 0;
}
```
3. 虚析构函数(virtual destructor):当基类指针指向派生类对象时,如果基类的析构函数不是虚函数,那么在销毁对象时只会调用基类的析构函数,而不会调用派生类的析构函数。为了正确释放派生类对象的资源,应将基类的析构函数声明为虚函数。
例如:
```cpp
class Base {
public:
virtual ~Base() {
cout << "Base destructor" << endl;
}
};
class Derived : public Base {
public:
~Derived() override {
cout << "Derived destructor" << endl;
}
};
int main() {
Base* ptr = new Derived();
delete ptr; // 输出:Derived destructor
return 0;
}
```
通过使用虚函数、纯虚函数和虚析构函数,可以实现多态性,使得程序能够根据对象的实际类型来调用相应的函数。
阅读全文