我有四个.cpp文件,Animal, Cattle, Sheep, DrugAdmin.
Animal是父类Cattle,它有calcDose(),它计算剂量.DrugAdmin是主要功能.问题是,我想以calcDose()不同的方式使用函数(牛,羊),课堂calcDose()上不需要任何功能Animal.但是,每次我尝试使用时 calcDose(),它都会自动调用Animal类中的函数,即使我想在Cattle类下使用它.这是我到目前为止所做的代码.(我把它砍了)
Animal.cpp
#include "Animal.h"
#include <string>
using namespace std;
Animal::Animal(int newid, double newweight, int yy, int mm, int dd, char newsex, vector<Treatment> treatArray)
{
id = newid;
weight = newweight;
yy = yy;
mm = mm;
dd = dd;
accDose = 0;
sex = newsex;
}
double Animal::calcDose(){
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Cattle.cpp
#include "Cattle.h"
using namespace std;
Cattle::Cattle(int newid, double newweight, int yy, int mm, int dd,
char newsex, vector<Treatment> newtreatArray, string newcategory)
: Animal(newid, newweight, yy,mm,dd, newsex, newtreatArray)
{
id = newid;
weight = newweight;
accDose = 0;
sex = newsex;
Cattle::category = newcategory;
}
Cattle::~Cattle(){}
double Cattle::calcDose(){
if(getDaysDifference() < 90 || getCategory() == "Meat"){
accDose = 0;
return accDose;
}
else if(getCategory() == "Dairy"){
if (weight < 250 || accDose > 200){
accDose = 0;
}
else{
accDose = weight * 0.013 + 46;
}
return accDose;
}
else if(getCategory() == "Breeding"){
if (weight < 250 || accDose > 250){
accDose = 0;
}
else{
accDose = weight * 0.021 + 81;
}
return accDose;
}
else
{
//cout << "It is not valid category" << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
绵羊类几乎相同,但内容 calcDose()
DrugAdmin.cpp
#include "DrugAdmin.h"
using namespace std;
vector<Animal*> vec_Animal;
void addAnimal(){
int select=0;
int id;
double weight;
int yy;
int mm;
int dd;
char sex;
string category;
vector<Treatment> treatArray;
//user inputs all the values (i've cut it down)
Animal* c1 = new Cattle(id,weight,yy,mm,dd,sex,treatArray,category);
vec_Animal.push_back(c1);
}
void administerDose(int id) //Main Problem
{
vector<Animal*>::iterator ite_Animal = vec_Animal.begin();
for(ite_Animal; ite_Animal != vec_Animal.end(); ++ite_Animal)
cout<<"\nVector contains:"<< (*ite_Animal)->calcDose();
}
Run Code Online (Sandbox Code Playgroud)
我很抱歉这个冗长而混乱的问题.最后一个问题是,Cattle有额外的数据成员,category但系统也没有认识到这一点.它识别出它是Animal对象.我可以请一点建议吗?
干杯
每次我尝试使用时
calcDose(),它会自动调用Animal类中的函数
听起来你忘记calcDose了virtual成员的功能.
最后一个问题是,
Cattle有额外的数据成员是类别,但系统也不承认这一点.它识别出它是Animal对象.
我不确定"系统""识别"任何东西是什么意思,但如果你Cattle通过一个访问一个对象Animal*,那么你就无法找到Cattle特定的成员.你可以使用a Cattle*或者再次使用多态性/ virtual.
| 归档时间: |
|
| 查看次数: |
386 次 |
| 最近记录: |