21xrx.com
2024-12-22 20:57:30 Sunday
登录
文章检索 我的文章 写文章
C++ 类继承的实现方法
2023-06-26 22:59:25 深夜i     --     --
继承 C++ 虚函数 多态 基类

C++ 是一种面向对象编程语言,其中类继承是一种重要的特性。通过继承,一个类可以从另一个类获得它的属性和方法。在 C++ 中,类继承有以下几种实现方法。

1.公有继承

公有继承是最常用的一种继承方式。在公有继承中,子类继承了父类的公有成员,而私有成员和保护成员则不能被继承。可以使用冒号(:)向子类指定继承哪个父类。

示例代码:


class Parent {

public:

  void foo()

    cout << "Parent foo" << endl;

  

};

class Child : public Parent {

public:

  void bar()

    cout << "Child bar" << endl;

  

};

int main() {

  Child c;

  c.foo(); // 可以调用Parent的公有成员函数

  c.bar();

  

  return 0;

}

2.私有继承

私有继承中,子类继承了父类的公有和保护成员,但这些成员在子类中都变成了私有成员。私有成员不会被继承。使用私有继承时必须注意访问权限的问题。

示例代码:


class Parent {

public:

  void foo()

    cout << "Parent foo" << endl;

  

  void bar()

    cout << "Parent bar" << endl;

  

};

class Child : private Parent {

public:

  void foobar() {

    foo(); // 可以调用Parent的公有成员函数

    bar(); // 可以调用Parent的 保护成员函数

  }

};

int main() {

  Child c;

  c.foobar(); // 可以调用foo和bar

  c.foo(); // 错误:foo已经成为了Child的私有成员

  

  return 0;

}

3.保护继承

保护继承中,子类继承了父类的公有和保护成员,但这些成员在子类中都变成了保护成员。访问权限和私有继承相同。

示例代码:


class Parent {

public:

  void foo()

    cout << "Parent foo" << endl;

  

  void bar()

    cout << "Parent bar" << endl;

  

};

class Child : protected Parent {

public:

  void foobar() {

    foo(); // 可以调用Parent的公有成员函数

    bar(); // 可以调用Parent的 保护成员函数

  }

};

int main() {

  Child c;

  c.foobar(); // 可以调用foo和bar

  c.foo(); // 错误:foo已经成为了Child的保护成员

  

  return 0;

}

4.多重继承

多重继承是 C++ 中另一个重要的概念。它允许一个类从多个基类派生。在多重继承中,可以使用逗号分隔多个基类。

示例代码:


class Parent1 {

public:

  void foo()

    cout << "Parent1 foo" << endl;

  

};

class Parent2 {

public:

  void bar()

    cout << "Parent2 bar" << endl;

  

};

class Child : public Parent1, public Parent2 {

public:

  void foobar() {

    foo(); // 可以访问Parent1中的foo()

    bar(); // 可以访问Parent2中的bar()

  }

};

int main() {

  Child c;

  c.foobar(); // 可以调用foo和bar

  

  return 0;

}

以上就是 C++ 类继承的实现方法。通过合理的继承方式,可以提高代码的重用性和可维护性。在设计类时需要好好考虑继承的使用,遵循面向对象编程的原则。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复