📜  C++ OOPs概念(1)

📅  最后修改于: 2023-12-03 14:59:45.185000             🧑  作者: Mango

C++ OOPs概念

C++是一个基于对象的编程语言,OOP意味着面向对象编程。对象是指一种数据结构,它具有状态和行为。在C++中,对象是一个具有属性和方法的实体。

类是用来描述对象的蓝图。它定义了对象的属性和方法。C++中的类可以包含公有(public)、私有(private)和保护(protected)方法和属性。这些方法和属性对外部世界可以是可见的(public),可以是不可见的(private),也可以只有继承的类可以访问(protected)。

class Rectangle {
   public:
      double width;
      double height;

      void setValues(double w, double h) {
         width = w;
         height = h;
      }

      double getArea() {
         return width * height;
      }
};
对象

对象是一个类的实例。例如,如果有一个类Rectangle,那么一个Rectangle对象将具有宽度和高度,可以使用setValues()方法来设置这些值,并且使用getArea()方法来获取其面积。

Rectangle rect;
rect.setValues(5, 3);
double area = rect.getArea();
继承

继承是一种定义新类的方式,该类可以继承现有类的所有属性和方法。继承关系用一个类的对象来派生出另一个类。

class Square: public Rectangle {
   public:
      void setSide(double side) {
         width = side;
         height = side;
      }
};

在这个例子中,Square继承了Rectangle的属性和方法,并且Square还定义了一个新的方法setSide()。由于Square是从Rectangle派生而来的,因此Square也可以调用Rectangle的方法。

Square sq;
sq.setSide(5);
double area = sq.getArea();
多态

多态是一个类的不同对象对相同的消息(方法调用)做出不同的响应的能力。多态性使对象更具可扩展性和可维护性。

class Shape {
   protected:
      int width;
      int height;

   public:
      virtual int getArea() = 0;
      void setValues(int w, int h) {
         width = w;
         height = h;
      }
};

class Rectangle: public Shape {
   public:
      int getArea() {
         return width * height;
      }
};

class Triangle: public Shape {
   public:
      int getArea() {
         return (width * height)/2;
      }
};

在这个例子中,Shape是抽象类,它包含虚方法getArea()。Rectangle和Triangle类继承Shape并且实现了自己getArea()方法。由于getArea()是虚方法,当它被调用时,程序会根据实际类型来调用正确的方法。

Shape* shape;
Rectangle rect;
Triangle tri;

shape = ▭
int rectArea = shape->getArea();

shape = &tri;
int triArea = shape->getArea();
封装

封装是一种将一个对象的属性和方法结合在一起的机制,然后控制访问这些属性和方法的访问级别。封装可以保护数据不被随意更改,从而确保应用程序的完整性。

class BankAccount {
   private:
      double balance;

   public:
      BankAccount(double b) {
         balance = b;
      }

      double getBalance() {
         return balance;
      }

      void deposit(double amount) {
         balance += amount;
      }

      void withdraw(double amount) {
         if(balance >= amount)
            balance -= amount;
      }
};

在这个例子中,BankAccount封装了balance属性和deposit()和withdraw()方法。由于balance是私有的,因此只有通过公共方法才能访问它。这使得BankAccount的使用更加安全,因为balance不能被随意更改。

BankAccount account(1000);
account.deposit(500);
account.withdraw(200);
double balance = account.getBalance();
总结

在C++中,OOP提供了一个强大的机制来组织应用程序。通过使用类、对象、继承、多态和封装,可以轻松地设计出可扩展、可维护和安全的应用程序。