21xrx.com
2025-06-23 08:29:04 Monday
文章检索 我的文章 写文章
C++中的封装、继承和多态概念解析
2023-07-08 05:56:19 深夜i     17     0
C++ 封装 继承 多态 概念解析

C++是一门集成了多种编程方法的面向对象编程语言,其中封装、继承和多态是其基本概念。

封装

封装是面向对象编程的一个重要概念,其主要原则是将数据和方法包装在一个单元内,对外部隐藏真正的数据和实现细节,只对外部公开接口。在C++中,封装通常使用类来实现。

对于封装来说,最重要的就是保护数据的安全,避免外界直接访问数据,导致不符合预期的结果。

例如,下面是一个封装示例:

// 声明一个类
class Rectangle
{
public:
  void setLength(double len);
  void setWidth(double wid);
  double area();
private:
  double length;
  double width;
};
// 实现类中的方法
void Rectangle::setLength(double len)
  length = len;
void Rectangle::setWidth(double wid)
  width = wid;
double Rectangle::area()
{
  return length * width;
}

在这个示例中,类把变量`length`和`width`封装在了成员变量中,提供了一个对外的公共方法`area()`来获取矩形的面积。而输入`length`和`width`的方法,则只能在类的内部被调用,避免了对变量的直接访问,从而提高了程序的安全性和可维护性。

继承

继承是一种重复利用类的方法,它使得一个新的类可以继承旧类的变量和方法。在C++中,这样的新旧类关系叫做父类和子类,其中子类是从父类继承而来的。

继承的优点是:节约编程时间、更好的代码重用性,加速代码编写速度和改进构建簇的灵活性。

例如,下面给出一个继承示例:

//声明一个父类
class Shape
{
public:
  // 获取面积的方法
  virtual double getArea() = 0;
};
//声明一个子类
class Circle : public Shape
{
public:
  double getArea();
private:
  double radius;
};
// 实现子类的方法
double Circle::getArea()
{
  return 3.14 * radius * radius;
}

上例中,Shape是一个基类,它既可以是抽象类,也可以是普通类。而Circle是一个子类,它从Shape中继承了getArea()方法,并在自己的类中重新定义实现。这样做的好处是,在需要计算面积的时候,可以直接调用Circle的getArea()方法,从而简化了代码的编写。

多态

多态是面向对象编程中的一个重要特性,它允许使用相同的方法名在不同的类中实现不同的行为。多态主要分为静态多态和动态多态。

静态多态:是编译时的多态,例如重载、模板等;

动态多态:是运行时的多态,它与虚函数、纯虚函数等有关。

例如,下面给出一个多态示例:

//声明一个基类
class Animal
{
public:
  virtual void makeSound() = 0;
};
// 声明一个子类
class Cat : public Animal
{
public:
  void makeSound()
  
    cout << "喵喵喵!" << endl;
  
};
// 声明另一个子类
class Dog : public Animal
{
public:
  void makeSound()
  
    cout << "汪汪汪!" << endl;
  
};
//main()函数中的使用示例
int main()
{
  Animal* ap;
  Cat c;
  Dog d;
  ap = &c;
  ap->makeSound();
  ap = &d;
  ap->makeSound();
  return 0;
}

上例中,Animal是基类,Cat和Dog是它的两个派生类。在新的main()函数中,通过使用基类指针ap,再将其指向不同的子类对象,显示其多态的效果。通过多态,子类对象方法makeSound()分别被调用,输出不同的结果。

综上,C++中的封装、继承和多态是三个基本特性,熟练掌握它们有助于减少代码量,提高代码重用率和维护性,实现更优秀的编程设计。

  
  

评论区