gpt4 book ai didi

c++ - 使用父函数(继承 c++)

转载 作者:行者123 更新时间:2023-11-30 00:39:57 24 4
gpt4 key购买 nike

我有四个 .cpp 文件,Animal、Cattle、Sheep、DrugAdminAnimalCattle 的父类,它有calcDose(),用于计算剂量。 DrugAdmin 是主要功能。问题是,我想以不同的方式使用 calcDose() 函数(牛、羊)并且 Animal 类不需要 calcDose() 函数.但是,每次我尝试使用 calcDose() 时,即使我想在 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;
}

牛.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;
}
}

Sheep 类几乎相同,但 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();
}

我很抱歉这个又长又乱的问题。最后一个问题是,Cattle 有额外的数据成员,它是 category 但系统也不能识别它。它识别为好像是 Animal 对象。请问有什么建议吗?

干杯

最佳答案

every time I try to use calcDose(), it automatically calls function in Animal class

听起来你忘了将 calcDose 设置为 virtual member function .

Final question is, Cattle has extra data member which is category but the system doesn't recognise this as well. It recognises as if it is Animal object.

我不确定你所说的“系统”“识别”任何东西是什么意思,但是如果你通过 Animal* 访问 Cattle 对象,那么你可以获取特定于 Cattle 的成员。您可能会使用 Cattle*,或者再次使用多态性/virtual

关于c++ - 使用父函数(继承 c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7625403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com