holyya.com
2025-09-04 15:46:21 Thursday
登录
文章检索 我的文章 写文章
C++ 继承实例:学习实现多层继承、虚基类和多态的例子
2023-06-29 19:28:52 深夜i     --     --
C++ 继承 多态 多层继承 虚基类

C++ 继承是面向对象编程中重要的概念,它让代码更具可复用性、可维护性和可扩展性。本文将介绍 C++ 中三个常见的继承实例:多层继承、虚基类和多态,通过这些实例你可以学习如何在 C++ 中使用继承来实现更高效的代码。

多层继承

多层继承是指子类可以继承父类的子类,也就是说,一个类可以同时是另一个或多个类的子类。多层继承可以让代码更具可读性和可维护性,但过度使用会导致类之间的依赖性增加,从而降低代码质量。下面是一个多层继承的示例:


class Grandparent {

public:

  void print()

    cout << "I am a grandparent." << endl;

  

};

class Parent : public Grandparent {

public:

  void print()

    cout << "I am a parent." << endl;

  

};

class Child : public Parent {

public:

  void print()

    cout << "I am a child." << endl;

  

};

int main() {

  Grandparent* g = new Grandparent();

  Parent* p = new Parent();

  Child* c = new Child();

  g->print(); // Output: I am a grandparent.

  p->print(); // Output: I am a parent.

  c->print(); // Output: I am a child.

  delete g;

  delete p;

  delete c;

}

在这个示例中,Grandparent 是 Parent 的父类,Parent 是 Child 的父类。运行时,我们可以看到每个对象的打印函数都被正确地调用。这说明了多层继承的实现是正确的。

虚基类

虚基类是多重继承中防止出现矛盾的一种工具。虚基类是指基类的一个派生类可以将其作为其它类的继承基类,而不重复继承这个基类的数据成员和函数成员。虚基类可以防止由派生类继承多个共同基类而导致的数据成员和函数成员重复的问题。下面是一个简单的虚基类示例:


class Base

public:

  int num;

;

class Derived1 : virtual public Base {

public:

  Derived1()

    num = 1;

  

};

class Derived2 : virtual public Base {

public:

  Derived2()

    num = 2;

  

};

class Derived3 : public Derived1, public Derived2 {

public:

  Derived3()

    num = 3;

  

};

int main()

  Derived3 d3;

  cout << "num = " << d3.num << endl;

在这个示例中,Base 是一个虚基类,Derived1 和 Derived2 都继承 Base,而 Derived3 继承 Derived1 和 Derived2。由于 Base 是虚基类,因此 Derived3 只继承一个 num 数据成员。因此,结果为 num = 3。

多态

多态是指子类可以通过继承和重写基类函数来实现特定于子类的行为。多态允许程序员根据正在处理的对象的类型执行不同的代码。通过多态实现的代码可以更加灵活,常用的多态实现方式有虚函数和模板。下面是一个虚函数实现多态的例子:


class Animal {

public:

  virtual void sound()

    cout << "The animal makes a sound." << endl;

  

};

class Dog : public Animal {

public:

  void sound()

    cout << "The dog barks." << endl;

  

};

class Cat : public Animal {

public:

  void sound()

    cout << "The cat meows." << endl;

  

};

int main() {

  Animal* a1 = new Dog();

  Animal* a2 = new Cat();

  a1->sound(); // Output: The dog barks.

  a2->sound(); // Output: The cat meows.

  delete a1;

  delete a2;

}

在这个示例中,Animal 是一个基类,Dog 和 Cat 是其子类。这些子类都重写了 sound() 函数,从而实现了特定于子类的行为。通过将 Animal 指针类型的变量分别指向 Dog 和 Cat 对象,我们可以看到当调用 sound() 函数时不同的函数被执行。

继承是 C++ 面向对象编程中的一个重要概念。通过本文的三个继承实例的学习,你可以更好地掌握多层继承、虚基类和多态。这些实例的实际应用场景非常广泛,我们在实际编程中也可以灵活运用它们,从而实现更高效的代码。

  
  

评论区

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