📜  C ++ |继承|问题2(1)

📅  最后修改于: 2023-12-03 14:39:38.707000             🧑  作者: Mango

C++ | 继承 | 问题2

什么是继承?

在面向对象编程中,继承(Inheritance)是一种允许一个新类(派生类)基于已有类(基类或父类)的属性和方法来创建的机制。继承使得派生类能够重用基类的代码而不需要重新编写,从而提高了程序的复用性和可读性。

继承的语法

在 C++ 中,使用 : 符号来表示一个类从另一个类继承,例如:

class Base {
public:
    int getNum() { return num; }
private:
    int num = 0;
};

class Derived: public Base {
public:
    void setNum(int n) { num = n; }
};

在上面的例子中,Derived 类从 Base 类继承。关键字 public 表明继承方式是公有的,即在 Derived 类中可以访问 Base 类中的公有成员和保护成员。

继承中的访问控制

在 C++ 中,继承方式可以是公有、保护或私有的。这个访问控制限制了派生类访问基类的成员的方式。例如:

  • 公有继承:派生类可以访问基类的公有成员和保护成员。这是最常见的继承方式。
  • 保护继承:派生类可以访问基类的保护成员,但不能访问基类的公有成员。在保护继承中,基类公有成员和私有成员都对派生类是不可访问的。
  • 私有继承:即使是在派生类中,基类的所有成员也都是私有的。
class A {      // 默认为私有继承
    int a;
protected:
    int b;
public:
    int c;
};

class B1 : public A {};  // 公有继承
class B2 : protected A {};  // 保护继承
class B3 : private A {};  // 私有继承

int main() {
    B1 b1;
    b1.a = 1;  // 错误,a 是私有成员
    b1.b = 2;  // 正确,b 是保护成员
    b1.c = 3;  // 正确,c 是公有成员

    B2 b2;
    b2.a = 1;  // 错误,a 是私有成员
    b2.b = 2;  // 正确,b 是保护成员
    b2.c = 3;  // 错误,c 是公有成员

    B3 b3;
    b3.a = 1;  // 错误,a 是私有成员
    b3.b = 2;  // 错误,b 是保护成员
    b3.c = 3;  // 错误,c 是公有成员

    return 0;
}
多重继承

在 C++ 中,一个类可以从多个类继承,这被称为多重继承。例如:

class A {
public:
    void funcA() {}
};

class B {
public:
    void funcB() {}
};

class C : public A, public B {
public:
    void funcC() {}
};

在上面的例子中,C 类从 AB 类分别公有继承了一个函数。可以用以下方式来调用这些函数:

C c;
c.funcA();
c.funcB();
c.funcC();
总结

继承是面向对象编程中比较重要的一个概念,它使得代码的复用性和可读性都得到了提高。在 C++ 中,使用 : 符号来表示一个类从另一个类继承,可以使用公有、保护或私有三种方式来限制派生类对基类成员的访问。多重继承是 C++ 中比较特殊的一个概念,它使得一个类可以从多个类中继承成员。