c++ 继承

目录

什么是继承?

基本语法

继承的类型

公有继承(public inheritance):

保护继承(protected inheritance):

私有继承(private inheritance):

继承中的构造函数和析构函数

多重继承

虚函数与多态

什么是继承?

继承是 C++ 中一种机制,允许一个类(称为派生类或子类)从另一个类(称为基类或父类)继承属性和方法。通过继承,子类可以重用父类的代码,扩展或修改其功能,从而提高代码的可重用性和组织性。

基本语法

在 C++ 中,继承通过在类定义时使用冒号 : 来实现。下面是一个简单的例子:

#include 
using namespace std;

// 基类
class Animal {
public:
    void eat() {
        cout << "This animal eats food." << endl;
    }
};

// 派生类
class Dog : public Animal {
public:
    void bark() {
        cout << "The dog barks!" << endl;
    }
};

int main() {
    Dog myDog;
    myDog.eat();  // 调用基类的函数
    myDog.bark(); // 调用派生类的函数
    return 0;
}

输出: 

This animal eats food.
The dog barks!

在这个例子中,Dog 类从 Animal 类继承,public 表示继承的访问权限(稍后会详细说明)。 

继承的类型

C++ 支持以下几种继承类型,根据访问修饰符的不同而变化:

  1. 公有继承(public inheritance):

    • 基类的 public 成员在派生类中仍是 public。

    • 基类的 protected 成员在派生类中仍是 protected。

    • 基类的 private 成员不可直接访问,但可以通过基类的公共接口间接访问。

  2. 保护继承(protected inheritance):

    • 基类的 public 和 protected 成员在派生类中变成 protected。

    • 基类的 private 成员仍不可直接访问。

  3. 私有继承(private inheritance):

    • 基类的 public 和 protected 成员在派生类中变成 private。

    • 基类的 private 成员仍不可直接访问。

示例: 

class Base {
public:
    int publicVar = 1;
protected:
    int protectedVar = 2;
private:
    int privateVar = 3;
};

class Derived : public Base {
public:
    void show() {
        cout << publicVar << " " << protectedVar << endl; // privateVar不可访问
    }
};

继承中的构造函数和析构函数

  • 构造函数:基类的构造函数不会被派生类继承,但派生类的构造函数会自动调用基类的默认构造函数。如果基类没有默认构造函数,派生类需要显式调用基类的构造函数。

  • 析构函数:析构函数不会被继承,但基类的析构函数会在派生类对象销毁时自动调用。为了避免内存泄漏,基类的析构函数通常应声明为 virtual。

 示例:

class Base {
public:
    Base() { cout << "Base constructor" << endl; }
    virtual ~Base() { cout << "Base destructor" << endl; }
};

class Derived : public Base {
public:
    Derived() { cout << "Derived constructor" << endl; }
    ~Derived() { cout << "Derived destructor" << endl; }
};

int main() {
    Derived d;
    return 0;
}

输出: 

Base constructor
Derived constructor
Derived destructor
Base destructor

多重继承

C++ 支持一个类从多个基类继承,这称为多重继承。语法如下:

class A {
public:
    void funcA() { cout << "Function A" << endl; }
};

class B {
public:
    void funcB() { cout << "Function B" << endl; }
};

class C : public A, public B {
};

int main() {
    C obj;
    obj.funcA(); // 调用 A 的函数
    obj.funcB(); // 调用 B 的函数
    return 0;
}

注意:多重继承可能导致“菱形问题”(Diamond Problem),即多个基类的共同基类被重复继承。解决方法是使用虚继承(virtual inheritance)。 

虚函数与多态

继承的一个重要用途是实现多态。多态通过虚函数(virtual 关键字)实现,允许派生类重写基类的函数。

示例:

class Animal {
public:
    virtual void sound() {
        cout << "Some generic animal sound" << endl;
    }
};

class Cat : public Animal {
public:
    void sound() override {
        cout << "Meow" << endl;
    }
};

int main() {
    Animal* ptr = new Cat();
    ptr->sound(); // 输出 "Meow"
    delete ptr;
    return 0;
}

这里,virtual 确保调用的是实际对象的函数,而不是指针类型的函数。 

你可能感兴趣的:(c++,开发语言,计算机外设,c语言,前端)