C++ 如何从基类动态创建和使用派生类?

C++ 如何从基类动态创建和使用派生类?,c++,pointers,inheritance,C++,Pointers,Inheritance,我想使用指向父类的指针来分配和使用子类对象。我有一个带有子Dog类的Animal类,Assign类应该将Dog类添加到它的Animal指针数组(Animal**animals)。目前,coutbreed给出错误:类“动物”没有名为“品种”的成员。。我必须这样做,因为这是一个实际的例子(这也是一个简化的例子,在真实的例子中,我们将有一个动物/衍生动物对象数组)。代码如下: #include <iostream> #include <string> #include <

我想使用指向父类的指针来分配和使用子类对象。我有一个带有子Dog类的Animal类,Assign类应该将Dog类添加到它的Animal指针数组(
Animal**animals
)。目前,
coutbreed
给出错误:
类“动物”没有名为“品种”的成员。
。我必须这样做,因为这是一个实际的例子(这也是一个简化的例子,在真实的例子中,我们将有一个动物/衍生动物对象数组)。代码如下:

#include <iostream>
#include <string>
#include <iomanip>

using namespace std;

class Animal{
public:
  double weight;
  Animal(double w){
    weight=w;
  }
  void shout(){
    cout<<"Weight: "<<weight<<endl;
  }
};

class Dog: public Animal{
public:
  string breed;
  Dog(string b,double w): Animal(w){
    breed=b;
    weight=w;
  }
};

class Asign{
public:
  Animal**animals;
  Asign(){
    animals=new Animal*[2];
    animals[0]=new Dog("Great Dane",12.2);
    cout<<animals[0]->breed<<endl;//Does not work
  }
};

int main(){
  Dog Duke("Great dane",12.2);
  Asign a;
}
#包括
#包括
#包括
使用名称空间std;
类动物{
公众:
双倍重量;
动物(双w){
重量=w;
}
无效呼喊(){
coutAn
动物(基类)没有
品种
成员变量,因此您收到错误。即使
有品种成员变量,
动物
对此一无所知。正确的代码是使用
动态
动物
指针投射到
,以投射类hierarchy,则您将有权访问类成员:

cout<<dynamic_cast<Dog*>(animals[0])->breed<<endl;

coutIs每个
动物
都应该有一个
品种
?如果是,那么类
动物
应该有一个
品种
成员。如果不是,那么
动物[0]->品种
是不明智的,因为不是每种动物
都有一个
品种
,所以没有办法从动物那里得到一个品种。见鬼,谁知道它是什么类型呢?
可以从
动物
中派生出来,并且编译器知道的
int
被称为
品种
。Wh在使用
dynamic\u cast
时,确保在使用指针之前检查返回值是否为NULL,例如:
Dog*d=dynamic\u cast(动物[0]);如果(d){从
Animal
Dog
的繁殖投射将是向下投射,而不是向上投射,对吗?