首页 > 编程语言 >C++:类的继承

C++:类的继承

时间:2024-11-21 13:15:33浏览次数:3  
标签:调用 继承 派生类 Dog C++ Animal 基类

在C++中,类的继承是一种面向对象编程(OOP)的重要特性,它允许一个类(子类或派生类)继承另一个类(基类或父类)的属性和方法。通过继承,可以重用现有的代码,减少重复代码,提高代码的可维护性和扩展性。

1. 基本概念

  • 基类(Base Class 或 Parent Class):被继承的类。
  • 派生类(Derived Class 或 Child Class):从基类继承的类。

2. 继承的语法

在C++中,使用冒号 : 来表示继承关系,并指定继承方式。继承方式有三种:

  • 公有继承(public):基类的公有成员和保护成员在派生类中保持原来的访问级别。
  • 私有继承(private):基类的公有成员和保护成员在派生类中变为私有成员。
  • 保护继承(protected):基类的公有成员和保护成员在派生类中变为保护成员。
class DerivedClass : access_specifier BaseClass {
    // 派生类的成员
};

其中 access_specifier 可以是 public、private 或 protected。

3. 示例

假设我们有一个基类 Animal,它有一些基本的属性和方法。然后我们定义一个派生类 Dog,它继承自 Animal 并添加了一些新的特性和方法。

#include <iostream>
using namespace std;

// 基类
class Animal {
protected:
    string name;
    int age;

public:
    Animal(string n, int a) : name(n), age(a) {}

    void eat() const {
        cout << name << " is eating." << endl;
    }

    virtual void makeSound() const {
        cout << "Some generic animal sound" << endl;
    }

    virtual ~Animal() {}  // 虚析构函数,确保派生类的析构函数被正确调用
};

// 派生类
class Dog : public Animal {
public:
    Dog(string n, int a) : Animal(n, a) {}

    void makeSound() const override {
        cout << name << " barks: Woof!" << endl;
    }

    void fetch() const {
        cout << name << " is fetching the ball." << endl;
    }
};

int main() {
    Animal animal("Generic Animal", 5);
    Dog dog("Rex", 3);

    animal.eat();
    animal.makeSound();

    dog.eat();
    dog.makeSound();
    dog.fetch();

    return 0;
}
  • 解释
    • 基类 Animal
      包含两个受保护的成员变量 name 和 age。
      包含一个构造函数,用于初始化成员变量。
      包含一个 eat 方法和一个虚方法 makeSound。
      包含一个虚析构函数,确保派生类的析构函数被正确调用。
    • 派生类 Dog
      使用公有继承 public 继承自 Animal。
      包含一个构造函数,调用基类的构造函数来初始化继承的成员变量。
      重写了基类的 makeSound 方法,提供特定于狗的行为。
      添加了一个新的方法 fetch,这是狗特有的行为。
    • 主函数 main
      创建了一个 Animal 对象和一个 Dog 对象。
      调用 Animal 对象的方法,展示通用动物的行为。
      调用 Dog 对象的方法,展示狗的特定行为。
  • 重要概念
    • 虚函数(Virtual Function):
      在基类中声明为 virtual 的函数可以在派生类中被重写(覆盖)。当通过基类指针或引用调用虚函数时,实际调用的是派生类中的版本。
      虚析构函数确保派生类的析构函数被正确调用,防止资源泄漏。
    • 多态(Polymorphism):
      多态允许基类指针或引用来调用派生类的方法。这是通过虚函数实现的。
      例如,可以将 Dog 对象赋值给 Animal 类型的指针或引用,并调用 makeSound 方法,实际调用的是 Dog 类中的 makeSound 方法。
  • 运行结果:
    在这里插入图片描述

通过继承,可以构建层次化的类结构,提高代码的复用性和可维护性。类的继承是C++中实现代码复用和扩展的强大工具,但也需要仔细设计以避免复杂的继承关系和潜在的问题。

标签:调用,继承,派生类,Dog,C++,Animal,基类
From: https://blog.csdn.net/u011732210/article/details/143843904

相关文章