文章目录
- 一、继承
- 1、概念
- 2、继承类型
- 3、继承中的构造函数与析构函数
前言:
在C++这一强大的编程语言中,继承是面向对象编程(OOP)的核心概念之一。它允许我们创建一个新的类(称为派生类或子类),这个新类可以继承一个或多个已存在的类(称为基类或父类)的属性和方法。通过继承,我们可以实现代码的重用、扩展和修改,从而构建更加复杂和灵活的软件系统。
一、继承
1、概念
继承的基本思想是基于已有,构建新的,下面是与继承相关的概念
- 基类与派生类: 基类是一个已经定义好的类,包含了一些属性和行为。派生类是在基类的基础上进行扩展,可以添加新的属性和行为,或者重写基类的方法。
- 派生类的定义: 在C++中,使用
:
运算符来定义一个派生类。
继承的一般语法:
class 派生类名:[继承方式] 基类名{派生类新增加的成员
};
示例代码:
#include <iostream>
#include <string>// 基类 Animal
class Animal {
public:// 基类的构造函数Animal(const std::string& name) : name_(name) {}// 基类的成员函数void eat() const {std::cout << name_ << " is eating." << std::endl;}// 基类的虚函数,用于后续的多态性virtual void sound() const {std::cout << "Some generic animal sound." << std::endl;}// 基类的析构函数(虚析构函数是良好的实践,尤其是当基类有虚函数时)virtual ~Animal() {}private:std::string name_; // 基类的私有数据成员
};// 派生类 Dog,继承自 Animal
class Dog : public Animal {
public:// 派生类的构造函数,调用基类的构造函数Dog(const std::string& name, const std::string& breed) : Animal(name), breed_(breed) {}// 重写基类的虚函数void sound() const override {std::cout << name_ << " barks." << std::endl;}// 派生类特有的成员函数void fetch() const {std::cout << name_ << " is fetching the ball." << std::endl;}private:std::string breed_; // 派生类的私有数据成员
};int main() {// 创建 Dog 对象Dog myDog("Buddy", "Golden Retriever");// 调用派生类的成员函数myDog.fetch();// 调用基类的成员函数(通过派生类对象)myDog.eat();// 调用重写后的虚函数myDog.sound();// 基类的虚析构函数确保当派生类对象被销毁时,基类部分也被正确清理return 0;
}
2、继承类型
C++支持多种类型的继承,包括公有继承、私有继承和保护继承。
- 公有继承: 在这种类型的继承中,基类的公有成员在派生类中仍然是公有的,而基类的保护成员在派生类中仍然是保护的。这是最常用的继承类型。
- 私有继承: 当使用私有继承时,基类的所有公有成员和保护成员在派生类中都会变成私有的。这意味着派生类的对象不能直接访问这些成员,但派生类内部可以访问。
- 保护继承: 保护继承与私有继承类似,但基类的公有成员在派生类中会变成保护的。这意味着派生类的对象不能直接访问这些成员,但派生类及其派生类可以访问。