21xrx.com
2024-09-20 00:34:32 Friday
登录
文章检索 我的文章 写文章
C++中实现多个类共用一个函数
2023-06-23 05:22:19 深夜i     --     --
C++ 函数 共用 多个

在C++中,我们经常需要让多个类共用一个函数。这种情况下,我们可以使用虚函数或重载函数的方式来实现。

虚函数是指在基类中定义的一个函数,其函数体可以为空,子类可以对其进行重写,并在运行时动态绑定到合适的子类。对于多个不同类型的对象,可以通过定义相同的虚函数来共享代码。例如:


class Shape {

public:

  virtual double area() const = 0;

};

class Circle : public Shape {

public:

  Circle(double r) : radius(r) {}

  double area() const override { return 3.14 * radius * radius; }

private:

  double radius;

};

class Rectangle : public Shape {

public:

  Rectangle(double w, double h) : width(w), height(h) {}

  double area() const override { return width * height; }

private:

  double width;

  double height;

};

int main() {

  Shape* s1 = new Circle(5);

  Shape* s2 = new Rectangle(3, 4);

  std::cout << s1->area() << std::endl; // 输出78.5

  std::cout << s2->area() << std::endl; // 输出12

  return 0;

}

在上面的代码中,我们定义了一个抽象类Shape,其中包含一个纯虚函数area(),并定义了两个具体类Circle和Rectangle,它们分别重写了这个函数。在main函数中,我们声明了两个指向Shape类型的指针,分别指向了一个Circle对象和一个Rectangle对象,并调用了它们的area()函数。

重载函数是指在同一个作用域内,在函数名相同的基础上,通过不同的参数个数或类型来区分函数。如果我们需要让多个类共用一个函数,但是它们的函数签名不同,那么可以使用重载函数的方式来实现。例如:


class Person {

public:

  void eat() std::cout << "Person is eating." << std::endl;

};

class Student : public Person {

public:

  void eat(int id) std::cout << "Student " << id << " is eating." << std::endl;

};

class Teacher : public Person {

public:

  void eat(std::string subject) std::cout << "Teacher is eating " << subject << "." << std::endl;

};

int main() {

  Person p;

  Student s;

  Teacher t;

  p.eat(); // 输出Person is eating.

  s.eat(123); // 输出Student 123 is eating.

  t.eat("lunch"); // 输出Teacher is eating lunch.

  return 0;

}

在上面的代码中,我们定义了一个基类Person和两个派生类Student和Teacher,它们分别重载了eat()函数并改变了参数类型。在main函数中,我们实例化了一个Person对象、一个Student对象和一个Teacher对象,并调用它们的eat()函数,通过不同的参数个数或类型来区分函数的行为。

  
  

评论区

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