21xrx.com
2024-11-05 19:37:47 Tuesday
登录
文章检索 我的文章 写文章
C++父类引用指向子类对象的使用方法
2023-07-14 04:03:10 深夜i     --     --
C++ 父类引用 子类对象 使用方法

在C++中,对象的引用是一个非常重要的概念,特别是在对象继承的情况下。在这种情况下,父类引用指向子类对象是一个非常常见的情况,这种应用可以让我们利用父类的公共接口来操作子类对象,提高代码的灵活性和复用性。

假设我们有一个Animal类,它有一个公用的虚函数sound(),代表着动物发出的声音,还有一个Dog类和一个Cat类,它们都继承自Animal类,并且重载了sound()。如下所示:


#include<iostream>

using namespace std;

class Animal{

public:

  virtual void sound()

    cout<<"Animal sound!"<<endl;

  

};

class Dog : public Animal{

public:

  void sound()

    cout<<"Woof woof!"<<endl;

  

};

class Cat : public Animal{

public:

  void sound()

    cout<<"Meow meow!"<<endl;

  

};

我们现在可以创建一个指向Dog对象的指针,然后调用sound()功能:


Dog myDog;

myDog.sound(); // 输出 "Woof woof!"

这个结果很显然,但是如果我们创建一个指向父类Animal的指针,又将它指向Dog对象,程序会如何输出呢?


Animal *myAnimal = &myDog;

myAnimal->sound(); // 输出 "Woof woof!"

这得益于C++ 的多态性,因为我们声明了sound()是虚函数,所以可以在运行时选择调用正确的函数。即使我们将Animal 指针指向Dog对象,程序也会识别出它实际上是Dog的sound()函数。

同样的,我们也可以把该指针重新指向另一个子类对象:


Cat myCat;

myAnimal =&myCat;

myAnimal->sound(); // 输出 "Meow meow!"

这种用法非常灵活,通过将父类引用指向不同的子类对象,我们可以在不重新编写代码的情况下,利用相同的接口来操作多种类型的对象。在实际开发中,这种机制大大简化了代码的编写和维护。

总而言之,使用父类引用指向子类对象是一种非常常见的技术,它让我们利用父类的公共接口处理不同种类的子类对象,减少了代码的冗余,提高了代码的可读性和可维护性。

  
  

评论区

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