所以我有这个代码:
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()