21xrx.com
2024-11-25 12:15:23 Monday
登录
文章检索 我的文章 写文章
C++虚函数与多态性:设计一个汽车类Motor
2023-06-28 10:13:31 深夜i     --     --
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++ 的虚函数和多态性是一种强大的特性,它们使得我们能够使用相同的代码来处理不同类型的对象。如果你正在开发一个大型的软件项目,并且需要使用一些基于继承的设计模式,那么虚函数和多态性就会变得非常重要。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复