当涉及到 C++ 中实现多态的三种方式时,我们通常指的是通过继承和虚函数来实现多态。以下是三种常见的实现方式:
虚函数(Virtual Functions):
#include <iostream>
class Shape {
public:
virtual void draw() {
std::cout << "Drawing a shape." << std::endl;
}
};
class Circle : public Shape {
public:
void draw() override {
std::cout << "Drawing a circle." << std::endl;
}
};
class Square : public Shape {
public:
void draw() override {
std::cout << "Drawing a square." << std::endl;
}
};
int main() {
Shape* shapePtr;
Circle circle;
Square square;
shapePtr = &circle;
shapePtr->draw(); // 调用 Circle 类的 draw() 函数
shapePtr = □
shapePtr->draw(); // 调用 Square 类的 draw() 函数
return 0;
}
纯虚函数(Pure Virtual Functions):
#include <iostream>
class Shape {
public:
virtual void draw() = 0; // 纯虚函数
};
class Circle : public Shape {
public:
void draw() override {
std::cout << "Drawing a circle." << std::endl;
}
};
class Square : public Shape {
public:
void draw() override {
std::cout << "Drawing a square." << std::endl;
}
};
int main() {
Shape* shapePtr;
Circle circle;
Square square;
shapePtr = &circle;
shapePtr->draw(); // 调用 Circle 类的 draw() 函数
shapePtr = □
shapePtr->draw(); // 调用 Square 类的 draw() 函数
return 0;
}
函数指针(Function Pointers):
#include <iostream>
class Shape {
public:
void (*drawFunction)(); // 函数指针
Shape(void (*draw)()) {
drawFunction = draw;
}
void draw() {
drawFunction();
}
};
void drawCircle() {
std::cout << "Drawing a circle." << std::endl;
}
void drawSquare() {
std::cout << "Drawing a square." << std::endl;
}