📜  C++ |继承|问题7(1)

📅  最后修改于: 2023-12-03 15:29:52.042000             🧑  作者: Mango

C++ | 继承 | 问题7

继承是C++中面向对象编程的核心概念之一。它允许从一个现有类派生出一个新类,从而可以重用现有类的属性和方法,并添加新的属性和方法。这个新的类被称为派生类或子类,而原有的类称为基类或父类。

基本语法

继承的基本语法如下:

class DerivedClass: accessSpecifier BaseClass {
    // members and methods
};

在这里,DerivedClass是派生类的名称,accessSpecifier是访问基类成员的方式,可以是publicprotectedprivateBaseClass是被派生的基类。

当派生类需要访问基类的成员时,可以使用BaseClass::运算符。例如,当在派生类的成员函数中调用基类的成员函数时,可以使用以下语法:

void DerivedClass::someFunction() {
    BaseClass::someFunction();
}
简单示例

下面是一个简单的示例,演示了如何从一个基类派生出一个子类:

#include <iostream> 

class Shape { 
   public: 
      void setWidth(int w) { 
         width = w; 
      } 
      void setHeight(int h) { 
         height = h; 
      } 
   protected: 
      int width; 
      int height; 
};

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

int main() { 
   Rectangle Rect; 

   Rect.setWidth(5); 
   Rect.setHeight(7); 

   // 输出对象的面积
   std::cout << "Total area: " << Rect.getArea() << std::endl; 

   return 0; 
} 

在这个例子中,Shape类包含setWidthsetHeight方法,用于设置宽度和高度属性。这两个属性被声明为protected,这意味着它们可以从子类中访问,但不能从外部访问。Rectangle类是从Shape类派生出来的子类,它包含getArea方法,该方法返回矩形的面积。

在主函数中,我们创建了一个Rectangle对象,并设置其宽度和高度属性。然后,我们调用getArea方法来计算面积,并将结果打印到控制台。

多重继承

C++允许从多个基类派生出一个子类,这被称为多重继承。语法如下:

class DerivedClass: accessSpecifier BaseClass1, accessSpecifier BaseClass2, ..., accessSpecifier BaseClassN {
    // members and methods
};

在这里,accessSpecifier是访问基类成员的方式,BaseClass1BaseClass2等是被派生的基类。多重继承可以让子类从多个类中继承属性和方法,但也可能导致代码的复杂性增加。

虚继承

虚继承是在多重继承中处理二义性问题的一种方式。在虚继承中,由基类首次声明的成员在派生类中只有一个共享实例,而不是多个副本。这通常用于处理菱形继承问题,其中派生类通过多个路径和不同的基类间接继承同一基类。

总结

继承是C++中重要的面向对象编程概念之一,它允许我们从一个现有类中派生出新的类。在派生类中,我们可以重用基类的属性和方法,添加新的属性和方法。我们还可以从多个类中继承属性和方法,但这可能会增加代码的复杂性。使用虚继承可以减少二义性问题。