多态输入功能无法正常工作

时间:2019-04-18 22:44:39

标签: c++ class polymorphism

所以我有这个代码:

vehicle *v1=&c;
std::cout<<"Car: "<<endl;
v1->input(cin);

车辆是基础类,汽车是派生类。它们都共享虚拟功能input。问题是,每当我调用此方法时,程序只能填充基本部分。这是输入的代码。 对于基类:

istream& vehicle::input(istream& is) {

    char buffer[100];
    is.getline(buffer,100);
    set_type(buffer);
    is.getline(buffer,100);
    set_brand(buffer);
    is.clear();
    return is;
}

对于汽车,派生类:

istream& car::input(istream& is) {

    vehicle::input(is);
    char buffer[100];
    is.getline(buffer,100);
    set_alim(buffer);
    is.clear();
    return is;
}

我还尝试删除了呼叫vehicle::input(is);,该程序没有执行任何操作。据说它无法识别虚拟方法。我该如何解决?

根据需要:

class vehicle {
friend ostream& operator<<(ostream&, const vehicle&);
friend istream& operator>>(istream&, vehicle&);
protected:
    char* type;
    char* brand;
public:
    //constructors
    void set_type(const char* t) {
        delete [] type;
        type=new char(strlen(t)+1);
        strcpy(type,t);
    }
    void set_brand(const char* t) {
        delete [] brand;
        brand=new char(strlen(t)+1);
        strcpy(brand,t);
    }

    virtual istream& input(istream&);
};

class car:public vehicle {
friend ostream& operator<<(ostream&, const car&);
friend istream& operator>>(istream&, car&);
private:
    char* alim;
public:
    //constructors
    void set_alim(const char* a) {
        delete [] alim;
        alim=new char(strlen(a)+1);
        strcpy(alim,a);
    }

    virtual istream& input(istream&);
};

编辑:我发现了这个错误,即使您创建一个新项目并完全按照我的方式构建代码,问题也没有使用is.ignore()

0 个答案:

没有答案