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