21xrx.com
2025-03-27 22:43:32 Thursday
文章检索 我的文章 写文章
C++虚函数与多态性:设计一个汽车类Motor
2023-06-28 10:13:31 深夜i     9     0
C++ 虚函数 多态性 汽车类 Motor

C++是一种流行的编程语言,它提供了许多有用的特性,其中之一就是虚函数和多态性。虚函数允许子类重写其基类中定义的函数,而多态性则使我们可以使用相同的代码来处理不同的对象类型。

为了理解这些特性如何工作,我们可以试着设计一个汽车类Motor。这个汽车类将有一些基本的属性和方法,包括车型、车牌、颜色、速度等等。

我们可以从一个基类开始,它将定义汽车的基本行为和特征。这个基类可以包含一些基本的成员变量和函数,例如类似下面这样的代码:

class Motor {
public:
  Motor(string type = "sedan", string plate = "0000", string color = "black", int speed = 0)
    m_type = type;
    m_plate = plate;
    m_color = color;
    m_speed = speed;
  
  virtual void run()
    cout << "Current speed is " << m_speed << "." << endl;
  
  virtual void stop()
    m_speed = 0;
    cout << "The car is stopped." << endl;
  
protected:
  string m_type;
  string m_plate;
  string m_color;
  int m_speed;
};

在这个基类中,我们定义了四个成员变量:车型、车牌、颜色和速度。我们还定义了两个虚函数:run() 和 stop(),它们将稍后由子类实现。

现在让我们假设我们要创建两个不同的汽车类型:轿车和越野车。这些汽车虽然有一些共同点,但它们也有很多不同之处。因此,我们将定义两个子类,它们将继承 Motor 类并重写其中的虚函数。

class Sedan : public Motor {
public:
  Sedan(string plate, string color) : Motor("Sedan", plate, color) {}
  void run() override {
    m_speed += 10;
    cout << "Sedan is running." << endl;
    Motor::run();
  }
  void stop() override {
    m_speed = 0;
    cout << "Sedan is stopped." << endl;
    Motor::stop();
  }
};
class SUV : public Motor {
public:
  SUV(string plate, string color) : Motor("SUV", plate, color) {}
  void run() override {
    m_speed += 5;
    cout << "SUV is running." << endl;
    Motor::run();
  }
  void stop() override {
    m_speed = 0;
    cout << "SUV is stopped." << endl;
    Motor::stop();
  }
};

在这些子类中,我们重写了 Motor 类中定义的两个虚函数。Sedan 类的 run() 函数增加了速度并输出一条消息,而 SUV 类的 run() 函数则使用一个不同的速度增量并输出一个不同的消息。

现在我们可以创建一些具体的汽车对象并使用它们了,如下所示:

int main() {
  Motor* m1 = new Sedan("苏A12345", "白色");
  m1->run();
  m1->stop();
  Motor* m2 = new SUV("苏B67890", "黑色");
  m2->run();
  m2->stop();
  return 0;
}

在上面的代码中,我们创建了一个 Sedan 对象和一个 SUV 对象,并调用它们的 run() 和 stop() 方法。由于 Sedan 和 SUV 类都是 Motor 类的子类,并且都重写了其虚函数,所以在调用这些函数时将会分别执行 Sedan 和 SUV 类的函数。

C++ 的虚函数和多态性是一种强大的特性,它们使得我们能够使用相同的代码来处理不同类型的对象。如果你正在开发一个大型的软件项目,并且需要使用一些基于继承的设计模式,那么虚函数和多态性就会变得非常重要。

  
  

评论区