21xrx.com
2024-12-22 21:55:48 Sunday
登录
文章检索 我的文章 写文章
C++基类指针数组指向派生类对象
2023-07-05 02:53:26 深夜i     --     --
C++ 基类指针 数组 指向派生类对象 继承关系

在C++中,我们经常使用继承机制来创建类。在继承中,基类与派生类之间是一种父子关系,派生类能够继承基类的方法和属性。在某些情况下,我们需要在数组中存储派生类的对象,并且我们经常会使用基类的指针来引用这些对象。

这时候,我们可以使用基类指针数组指向派生类对象。具体而言,我们可以在声明指针数组时使用基类指针来声明变量,而将派生类的对象赋值给每个数组元素。这样,我们就可以通过使用基类指针来访问每个派生类对象中的属性和方法了。

例如,假设我们有一个基类Animal,其中包含了名字和年龄的属性和一些基本方法。我们还有两个派生类Dog和Cat,分别继承了Animal并添加了一些自己的方法。现在,我们需要在数组中存储多个Dog和Cat的实例,并能够在程序中使用基类的指针来引用这些实例。

在这种情况下,我们可以使用Animal类型的指针数组来完成这个任务。首先,我们声明一个指针数组,指向Animal类的指针,然后使用new关键字分别为每个元素分配内存空间,再将指向Dog对象和Cat对象的指针赋值给这些元素。

下面是示例代码:


#include <iostream>

#include <string>

using namespace std;

class Animal{

protected:

  string name;

  int age;

public:

  virtual void speak() =0;//纯虚函数

  virtual ~Animal() {}

};

class Dog:public Animal{

public:

  Dog(string n, int a) name=n; age=a;

  void speak() cout << "I'm a dog!" << endl;

};

class Cat:public Animal{

public:

  Cat(string n, int a) name=n; age=a;

  void speak() cout << "I'm a cat!" << endl;

};

int main(){

  Animal *animals[4];

  animals[0] = new Dog("Tommy", 3);

  animals[1] = new Cat("Kiki", 2);

  animals[2] = new Dog("Fluffy", 1);

  animals[3] = new Cat("Mimi", 4);

  for (int i=0; i<4; i++)

    animals[i]->speak();

  return 0;

}

在上述代码中,我们创建了一个大小为4的Animal指针数组,然后使用new关键字为每个元素分配内存空间。接着,我们将指向Dog对象和Cat对象的指针分别赋值给这些元素。最后,我们使用基类指针来访问每个元素的speak方法,并输出结果。

总的来说,使用基类指针数组指向派生类对象是实现多态性的一个重要方法。在实际编程中,我们可以通过这种方式更方便地管理派生类的对象,并能够灵活地使用基类中的方法和属性,从而提高代码的可读性和可维护性。

  
  

评论区

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