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

jca*_*los 1 c++ visual-c++

我有四个.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对象.我可以请一点建议吗?

干杯

Fre*_*Foo 5

每次我尝试使用时calcDose(),它会自动调用Animal类中的函数

听起来你忘记calcDosevirtual成员的功能.

最后一个问题是,Cattle有额外的数据成员是类别,但系统也不承认这一点.它识别出它是Animal对象.

我不确定"系统""识别"任何东西是什么意思,但如果你Cattle通过一个访问一个对象Animal*,那么你就无法找到Cattle特定的成员.你可以使用a Cattle*或者再次使用多态性/ virtual.