【发布时间】:2018-09-05 22:11:16
【问题描述】:
我想使用指向父类的指针来分配和使用子类对象。我有一个带有子 Dog 类的 Animal 类,Assign 类应该将 Dog 类添加到它的 Animal 指针数组 (Animal**animals)。目前cout<<animals[0]->weight 输出正确,但animals[0]->breed 给出错误:Class 'Animal' has no member named 'breed'。我必须这样做,因为这是为了实用(这也是一个简化的示例,因为在真实示例中,我们将拥有一组 Animal/派生的 Animal 对象)。代码如下:
#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;
}
【问题讨论】:
-
每个
Animal都应该有一个breed吗?如果是这样,那么Animal类应该有一个breed成员。如果不是,那么animals[0]->breed是不明智的,因为不是每个Animal都有breed,所以没有办法从Animal获得breed。哎呀,谁知道它是什么类型的?Cat可以从Animal派生而来,并且有一个int称为breed编译器知道的所有内容。
标签: c++ pointers inheritance