C++ 继承

继承

在 C++ 中,可以将属性和方法从一个类继承到另一个类。我们将 "继承概念" 分为两类:

  • 子类(子类)- 从另一个类继承的类
  • 超类(父类)- 从父类继承的类

要从类继承,请使用 extends 关键字。在下面的实例中,Car类(子类)继承了 Vehicle 类(父类)的属性和方法

实例
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. // Base class
  5. class Vehicle {
  6. public:
  7. string brand = "Ford";
  8. void honk() {
  9. cout << "Tuut, tuut! \n" ;
  10. }
  11. };
  12. // Derived class
  13. class Car: public Vehicle {
  14. public:
  15. string model = "Mustang";
  16. };
  17. int main() {
  18. Car myCar;
  19. myCar.honk();
  20. cout << myCar.brand + " " + myCar.model;
  21. return 0;
  22. }

为什么以及何时使用 "继承"?

  • 它对代码的可重用性很有用:在创建新类时重用现有类的属性和方法。

多级继承

一个类也可以从一个类派生(这个类是从另一个类派生的)。

在下面的实例中,MyGrandChild 是从类 MyChild(从 MyClass 派生)派生的。

  1. #include <iostream>
  2. using namespace std;
  3. // Parent class
  4. class MyClass {
  5. public:
  6. void myFunction() {
  7. cout << "Some content in parent class." ;
  8. }
  9. };
  10. // Child class
  11. class MyChild: public MyClass {
  12. };
  13. // Grandchild class
  14. class MyGrandChild: public MyChild {
  15. };
  16. int main() {
  17. MyGrandChild myObj;
  18. myObj.myFunction();
  19. return 0;
  20. }

多重继承

一个类也可以使用逗号分隔的列表从多个基类派生:

  1. #include <iostream>
  2. using namespace std;
  3. // Base class
  4. class MyClass {
  5. public:
  6. void myFunction() {
  7. cout << "Some content in parent class.\n" ;
  8. }
  9. };
  10. // Another base class
  11. class MyOtherClass {
  12. public:
  13. void myOtherFunction() {
  14. cout << "Some content in another class.\n" ;
  15. }
  16. };
  17. // Derived class
  18. class MyChildClass: public MyClass, public MyOtherClass {
  19. };
  20. int main() {
  21. MyChildClass myObj;
  22. myObj.myFunction();
  23. myObj.myOtherFunction();
  24. return 0;
  25. }

访问修饰符

访问修饰符 章节中学习到 C++ 中有三种修饰符。到目前为止,我们只使用 public(类的成员可以从类外部访问)和 private(成员只能在类内部访问)。第三种修饰符 protected 类似于 private,但也可以在继承的类中访问它:

  1. #include <iostream>
  2. using namespace std;
  3. // Base class
  4. class Employee {
  5. protected: // Protected access specifier
  6. int salary;
  7. };
  8. // Derived class
  9. class Programmer: public Employee {
  10. public:
  11. int bonus;
  12. void setSalary(int s) {
  13. salary = s;
  14. }
  15. int getSalary() {
  16. return salary;
  17. }
  18. };
  19. int main() {
  20. Programmer myObj;
  21. myObj.setSalary(50000);
  22. myObj.bonus = 15000;
  23. cout << "Salary: " << myObj.getSalary() << "\n";
  24. cout << "Bonus: " << myObj.bonus << "\n";
  25. return 0;
  26. }