21xrx.com
2024-09-20 00:07:36 Friday
登录
文章检索 我的文章 写文章
C++面向对象的三大特性举例子
2023-07-05 13:31:14 深夜i     --     --
C++ 面向对象 三大特性 封装 继承 多态

C++是一种面向对象的编程语言,它有三大特性:封装、继承和多态。这些特性使C++成为一个强大的编程语言,也帮助开发人员编写更加模块化、可维护和可复用的代码。下面,我们将逐一介绍这三大特性,并举例说明它们的应用。

一、封装

封装是指将数据和对数据的操作封装在一起,对外部代码隐藏内部实现的细节。通过封装,可以确保数据是受保护的,并且仅能通过预定义的方法进行访问。以下是一个简单的例子:


class Rectangle {

 private:

  double length;

  double width;

 public:

  void setLength(double len)

   length = len;

  

  void setWidth(double wid)

   width = wid;

  

  double getArea() {

   return length * width;

  }

};

int main() {

 Rectangle rect;

 rect.setLength(5.0);

 rect.setWidth(3.0);

 cout << "Area of the rectangle: " << rect.getArea() << endl;

 return 0;

}

在上面的例子中,我们定义了一个矩形类Rectangle,并使用private访问修饰符来保护length和width成员变量。我们使用public访问修饰符来定义setLength、setWidth和getArea方法,这些方法用于设置矩形的长度和宽度,并计算矩形的面积。由于length和width是私有的,外部代码无法直接访问它们,因此我们必须使用public方法来访问它们。

二、继承

继承是指一个类可以从另一个类继承其属性和方法,并且可以拥有自己的属性和方法。这种关系称为父-子关系。以下是一个简单的例子:


class Shape {

 protected:

  int width;

  int height;

 public:

  Shape(int w = 0, int h = 0)

   width = w;

   height = h;

  

  virtual int getArea()

   cout << "Parent class area: " << endl;

   return 0;

  

};

class Rectangle: public Shape {

 public:

  Rectangle(int w = 0, int h = 0):Shape(w, h) { }

  int getArea() {

   cout << "Rectangle class area: " << endl;

   return (width * height);

  }

};

int main() {

 Shape *shape;

 Rectangle rec(10, 7);

 shape = &rec;

 // 调用矩形的求面积函数

 shape->getArea();

 return 0;

}

在上面的例子中,我们定义了一个Shape类,它具有width和height属性,并定义了一个虚拟方法getArea。接下来,我们定义了一个Rectangle类,它从Shape类继承,并重写了getArea方法。在main函数中,我们创建了一个Rectangle对象,并将它赋给一个指向Shape类的指针。然后,我们调用该指针的getArea方法,由于Rectangle重写了getArea方法,所以输出的是矩形的面积。这就是继承的威力。

三、多态

多态是指同一种方法可以根据上下文中的对象类型以不同的方式进行操作。这是C++中最重要的特性之一。以下是一个简单的例子:


class Shape {

 protected:

  int width;

  int height;

 public:

  Shape(int w = 0, int h = 0)

   width = w;

   height = h;

  

  virtual int getArea()

   cout << "Parent class area: " << endl;

   return 0;

  

};

class Rectangle: public Shape {

 public:

  Rectangle(int w = 0, int h = 0):Shape(w, h) { }

  int getArea() {

   cout << "Rectangle class area: " << endl;

   return (width * height);

  }

};

class Triangle: public Shape {

 public:

  Triangle(int w = 0, int h = 0):Shape(w, h) { }

  int getArea() {

   cout << "Triangle class area: " << endl;

   return (width * height / 2);

  }

};

int main() {

 Shape *shape;

 Rectangle rec(10, 7);

 Triangle tri(10, 5);

 shape = &rec;

 // 调用矩形的求面积函数

 shape->getArea();

 // 改变指针的指向

 shape = &tri;

 // 调用三角形的求面积函数

 shape->getArea();

 return 0;

}

在上面的例子中,我们定义了一个Shape类,它具有width和height属性,并定义了一个虚拟方法getArea。接下来,我们定义了一个Rectangle类和一个Triangle类,它们分别从Shape类继承,并重写了getArea方法。在main函数中,我们创建了一个Rectangle对象和一个Triangle对象,并将它们分别赋给一个指向Shape类的指针。然后,我们调用该指针的getArea方法,由于Rectangle和Triangle都重写了getArea方法,所以输出的是矩形的面积和三角形的面积。这就是多态的威力。

总结

C++面向对象的三大特性——封装、继承和多态,是C++编程中不可或缺的重要部分。它们帮助我们编写更加模块化、可维护和可复用的代码,同时也提高了编程的效率和可靠性。掌握这些特性,对于C++编程来说至关重要。

  
  

评论区

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