C++中的继承

C++中的继承是一种面向对象编程的重要概念,它允许一个类(称为派生类或子类)从另一个类(称为基类或父类)继承属性和方法。继承可以通过扩展现有类的功能,实现代码的重用性和层次性。

继承的基本语法:

class BaseClass {
    // 基类的成员声明
};

class DerivedClass : access-specifier BaseClass {
    // 派生类的成员声明
};

其中,access-specifier 可以是 publicprotectedprivate,用于指定派生类对基类成员的访问权限。

继承的几个重要概念和特点:

  1. 公有继承(public inheritance):使用 public 关键字表示,派生类可以访问基类的公有成员。公有继承建立了一个"is-a"的关系,表示派生类是基类的一种特殊类型。

  2. 保护继承(protected inheritance):使用 protected 关键字表示,派生类可以访问基类的保护成员。保护继承建立了一种"is-implemented-in-terms-of"的关系。

  3. 私有继承(private inheritance):使用 private 关键字表示,派生类无法直接访问基类的成员。私有继承建立了一种"implemented-in-terms-of"的关系。

公有继承示例:

class Animal {
public:
    void eat() {
        cout << "Animal is eating." << endl;
    }
};

class Dog : public Animal {
public:
    void bark() {
        cout << "Dog is barking." << endl;
    }
};

int main() {
    Dog dog;
    dog.eat();  // 派生类对象可以访问基类的公有成员
    dog.bark();

    return 0;
}

在上述示例中,Animal 类是基类,Dog 类是派生类。Dog 类通过公有继承(public)从 Animal 类继承了 eat() 方法。在 main 函数中,我们创建了一个 Dog 对象 dog,并可以使用 dog.eat()dog.bark() 调用继承自基类的方法和派生类自己的方法。

保护继承示例:

在保护继承中,使用 protected 关键字进行声明,派生类可以访问基类的保护成员,但不能直接访问基类的公有成员。

class Base {
protected:
    int protectedData;

public:
    void baseMethod() {
        // 公有函数
    }
};

class Derived : protected Base {
public:
    void derivedMethod() {
        protectedData = 10;  // 可以访问基类的保护成员
        baseMethod();        // 可以调用基类的公有函数
    }
};

int main() {
    Derived derivedObj;
    derivedObj.derivedMethod();

    // derivedObj.protectedData;  // 错误,无法直接访问基类的保护成员
    // derivedObj.baseMethod();    // 错误,无法直接调用基类的公有函数

    return 0;
}

在上述示例中,Base 类有一个保护成员 protectedData 和一个公有函数 baseMethod。Derived 类以保护继承的方式派生自 Base 类。在 Derived 类中的 derivedMethod 函数中,可以访问基类的保护成员 protectedData,并且可以调用基类的公有函数 baseMethod。但在 main 函数中,无法通过 derivedObj 对象直接访问基类的保护成员或调用基类的公有函数。

私有继承示例:

在私有继承中,使用 private 关键字进行声明,派生类无法直接访问基类的成员,包括公有成员和保护成员。私有继承主要用于实现"implemented-in-terms-of"的关系,而不是扩展基类的接口。

class Base {
public:
    void baseMethod() {
        // 公有函数
    }
};

class Derived : private Base {
public:
    void derivedMethod() {
        baseMethod();  // 可以调用基类的公有函数
    }
};

int main() {
    Derived derivedObj;
    derivedObj.derivedMethod();

    // derivedObj.baseMethod();  // 错误,无法直接调用基类的公有函数

    return 0;
}

在上述示例中,Base 类有一个公有函数 baseMethod。Derived 类以私有继承的方式派生自 Base 类。在 Derived 类中的 derivedMethod 函数中,可以调用基类的公有函数 baseMethod。但在 main 函数中,无法通过 derivedObj 对象直接调用基类的公有函数。

私有继承用于实现代码重用和隐藏基类接口的目的,派生类可以通过私有继承获得基类的实现细节,但不会继承其接口。


继承还具有以下特点:

  • 派生类可以继承基类的成员变量和成员函数。
  • 派生类可以重写(override)基类的虚函数,实现多态性。
  • 派生类可以添加新的成员变量和成员函数。
  • 派生类可以通过访问控制符修改基类成员的访问权限。
  • 派生类可以多层继承,即从一个派生类派生出另一个派生类。

总结:
继承是C++中实现面向对象编程的重要机制,它允许派生类从基类继承属性和方法。通过继承,派生类可以扩展和重用基类的功能,并形成类之间的层次关系。继承在对象的抽象和多态性的实现中起着关键作用。

你可能感兴趣的:(C++,c++,开发语言)