亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C++ 继承完全指南:构建可复用的强大类层次

C++ 继承完全指南

本教程通过实例系统讲解 C++ 继承机制,包括基类/派生类关系、protected 成员、访问模式、函数重写及多重继承基础。

继承是 C++ 面向对象编程的核心特性之一。它允许从现有类(基类/父类)创建新类(派生类/子类)。

派生类继承基类的特性,并可添加自身特有功能。例如:

class Animal {
    // eat() 函数
    // sleep() 函数
};
class Dog : public Animal {
    // bark() 函数
};

Dog 从 Animal 派生。因为继承关系,Dog 可访问 Animal 的成员。

C++ 继承完全指南:构建可复用的强大类层次

注意继承时使用的 public 关键字:

class Dog : public Animal {...};

也可用 private 或 protected 继承,稍后详述差异。


is-a 关系

继承体现is-a 关系("是一种"关系)。仅当两个类之间存在 is-a 关系时才应使用继承。


示例 1:C++ 继承简单示例

// C++ 继承演示程序
#include <iostream>
using namespace std;

// 基类
class Animal {
public:
    void eat() {
        cout << "I can eat!" << endl;
    }
    void sleep() {
        cout << "I can sleep!" << endl;
    }
};

// 派生类
class Dog : public Animal {
public:
    void bark() {
        cout << "I can bark! Woof woof!!" << endl;
    }
};

int main() {
    Dog dog1;
    // 调用基类成员
    dog1.eat();
    dog1.sleep();
    // 调用派生类成员
    dog1.bark();
    return 0;
}

输出

I can eat!
I can sleep!
I can bark! Woof woof!!

派生类对象 dog1 可访问基类 Animal 的成员,因为 Dog 继承自 Animal。


C++ protected 成员

访问修饰符 protected 在继承中尤为重要。

与 private 类似,protected 成员在类外不可访问。但派生类和友元类/函数可访问。

当我们希望隐藏类数据,但允许派生类继承访问时,需用 protected。

详细内容请参考 C++ 访问修饰符教程。


示例 2:protected 成员演示

// protected 成员演示
#include <iostream>
#include <string>
using namespace std;

class Animal {
private:
    string color;
protected:
    string type;
public:
    void eat() { cout << "I can eat!" << endl; }
    void sleep() { cout << "I can sleep!" << endl; }
    void setColor(string clr) { color = clr; }
    string getColor() { return color; }
};

class Dog : public Animal {
public:
    void setType(string tp) { type = tp; }
    void displayInfo(string c) {
        cout << "I am a " << type << endl;
        cout << "My color is " << c << endl;
    }
    void bark() { cout << "I can bark! Woof woof!!" << endl; }
};

int main() {
    Dog dog1;
    dog1.eat();
    dog1.sleep();
    dog1.setColor("black");
    dog1.bark();
    dog1.setType("mammal");
    dog1.displayInfo(dog1.getColor());
    return 0;
}

输出

I can eat!
I can sleep!
I can bark! Woof woof!!
I am a mammal
My color is black

protected 变量 type 可在派生类 Dog 中通过 setType() 访问。而 private 变量 color 无法在 Dog 中直接访问:

class Dog : public Animal {
public:
    void setColor(string clr) {
        // 错误:Animal::color 不可访问
        color = clr;
    }
};

同时,protected 也隐藏数据,外部对象无法直接访问:

// 错误:Animal::type 不可访问
dog1.type = "mammal";

C++ 继承访问模式

继承时可用 public、private、protected 三种模式:

class Animal { /* ... */ };
class Dog : private Animal { /* ... */ };
class Cat : protected Animal { /* ... */ };

这三种方式称为访问模式,效果如下:

  1. public:基类成员在派生类中保持原访问级别。
  2. private:基类所有成员在派生类中变为 private。
  3. protected:基类 public 和 protected 成员在派生类中变为 protected。

基类 private 成员在派生类中始终不可访问。

详细内容请访问:C++ public、private、protected 继承教程。


继承中的成员函数重写

若基类与派生类拥有同名同参数的成员函数,通过派生类对象调用时,会调用派生类版本,即派生类函数重写基类函数。

详细内容请参考:C++ 函数重写教程。


推荐阅读: C++ 多重继承

C语言

  1. C# static 关键字:静态变量、方法与类完全掌握
  2. 理解 C# 嵌套类:定义、访问与继承实战
  3. 掌握 C++ 运算符:六大类型全解析与实战示例
  4. C++类与对象:面向对象编程实战指南
  5. C++ 三种继承方式深度解析:public、protected 与 private
  6. C++ 类模板实战指南:编写灵活的类型无关代码
  7. C++存储类别全解析:auto/register/static/extern/mutable作用域与生命周期
  8. C++多态实战指南:虚函数、动态绑定与纯虚函数
  9. C++数据抽象实战:接口与实现分离的设计艺术
  10. C++数据封装:守护代码安全的核心机制
  11. C++接口编程:抽象类与纯虚函数实现规范契约
  12. 精通 Python 继承:概念、语法与实战示例