21xrx.com
2024-12-22 23:10:43 Sunday
登录
文章检索 我的文章 写文章
C++继承抽象类的概念和实现
2023-06-22 19:23:41 深夜i     --     --
C++ 继承 抽象类 概念 实现

C++是一种面向对象编程语言,继承是其中的一个重要特性。继承可以让一个类从另一个类中获得属性和方法,从而减少代码的复制和冗余。在C++中,继承还可以通过抽象类的概念来实现接口和规范。

抽象类是一个不能被实例化的类,它的目的是规定一组接口,来约束继承它的子类的行为。在C++中,抽象类可以通过纯虚函数来实现。纯虚函数是一种在定义时不给出实现的虚函数,它的声明形式为:

virtual returnType functionName(parameters) = 0;

在抽象类中,至少有一个纯虚函数,这样它就不能被实例化。子类必须实现纯虚函数,否则也会成为抽象类,不能被实例化。

下面是一个抽象类的例子:

class Shape {

public:

  virtual double area() = 0;

  virtual double perimeter() = 0;

};

这个抽象类定义了两个纯虚函数:area和perimeter。它规定了一个几何图形必须有面积和周长这两个属性。

子类可以继承这个抽象类,并实现它定义的接口,下面是一个圆形和矩形的例子:

class Circle : public Shape {

public:

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

  double area() override {

    return 3.14 * _radius * _radius;

  }

  double perimeter() override {

    return 2 * 3.14 * _radius;

  }

private:

  double _radius;

};

class Rectangle : public Shape {

public:

  Rectangle(double width, double height) : _width(width), _height(height) {}

  double area() override {

    return _width * _height;

  }

  double perimeter() override {

    return 2 * (_width + _height);

  }

private:

  double _width;

  double _height;

};

这里的Circle和Rectangle都继承了Shape抽象类,并实现了它定义的两个纯虚函数。它们都有面积和周长这两个属性,并能够计算出来。在程序中可以通过多态的方式来处理它们:

int main() {

  Shape *s1 = new Circle(5);

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

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

  std::cout << s2->perimeter() << std::endl; // 14

  delete s1;

  delete s2;

  return 0;

}

这个程序中,根据用户输入不同的参数,可以动态生成Circle或Rectangle对象,但是它们都是通过Shape抽象类来引用的。当调用它们的area和perimeter方法时,会根据实际的对象类型来调用正确的方法。

继承和抽象类是C++中最基本的面向对象编程概念之一,它们可以让程序更加灵活和易于扩展。掌握这些概念,可以让程序员更加高效地开发出复杂的系统。

  
  

评论区

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