C++ C++;子类类型的输出变量

C++ C++;子类类型的输出变量,c++,printing,subclass,overwrite,C++,Printing,Subclass,Overwrite,我正在编写一个程序,它有一个方法可以接收带有roads的.txt文件,所以(现在请原谅我的粗略翻译)有一个名为Road的类,它有3个属性: Road(string code, int length, int travel) 和两个子类,每个子类继承这3个参数,但每个子类都有一个额外的参数: Freeway(double toll) Highway(string terrain) 在读取此格式的文件时 ROAD1,300,190,asphalt ROAD2,72,45,4.75 (etc...

我正在编写一个程序,它有一个方法可以接收带有roads的.txt文件,所以(现在请原谅我的粗略翻译)有一个名为Road的类,它有3个属性:

Road(string code, int length, int travel)
和两个子类,每个子类继承这3个参数,但每个子类都有一个额外的参数:

Freeway(double toll)
Highway(string terrain)
在读取此格式的文件时

ROAD1,300,190,asphalt
ROAD2,72,45,4.75
(etc...)
…该方法基于最后一个参数(double或string)检测高速公路或高速公路,并相应地创建其中一个的新实例,并将其发送到数组,然后读取下一行,直到没有更多的行可读取

到目前为止,这是正常工作。但是,在打印数组元素的参数时,如果使用Road类中的打印方法,我自然会得到以下结果:

(ROAD1,300,190)
这是很自然的,因为类没有最后一个参数。但是,如果我使用相同的方法从高速公路或高速公路类打印,我会得到以下输出(在高速公路的情况下):

我不知道这些值是什么。另外,它既不打印地形,也不打印第一个参数,即代码字符串。我做错了什么?以下是我在公路和高速公路上使用的代码:

void Road::writer(ostream&out)const{
无法确保初始化
如标题所述,当您初始化
高速公路
高速公路
时,应调用
道路
构造函数

e、 g

改变这个
void Road::writer(std::ostream&out)const{

std::cout“发送到数组”是什么意思?显示代码的这一部分。我怀疑你可能被咬了。还显示你如何称呼
作者
。无意义的评论:高速公路怎么会收费?:@summerbull正如我所说,这是从我的语言到英语的粗略翻译,所以我很确定我没有正确理解:p@IgorTandetnik我会更新的post@summerbulb:就我而言,我一直想知道我们为什么要在停车场上开车,为什么要把车停在车道上。
Highway
(,-842150451, -842150451)Terrain:
void Road::writer(ostream &out) const {
    cout << "(" << code  << "," << length << "," << travel << ")"; 
}
void Highway::writer(ostream & out) const {
    out << "Highway" << endl;
    Road::writer(out);
    out << "Terrain:" << terrain << endl;
}
void TestHeader::outputRoads(){
    for(int i=0;i<ind;i++)  //ind is the number of elements of the road array
        cout<<*vecRoads[i]<<endl;
}
Highway::Highway(std::string code, int length, int travel, std::string terrain)
    : Road(code, length, travel){

    this->terrain = terrain; // Arguments shouldn't have the same name as class memebers
}
void Road::writer(std::ostream &out) const{
    std::cout << "(" << code  << "," << length << "," << travel << ")";
}
void Road::writer(std::ostream &out) const{
    out << "(" << code  << "," << length << "," << travel << ")";
}
std::ostream &operator <<(std::ostream &out, const Road &road){
    out << "(" << road.code  << "," << road.length << "," << road.travel << ")";
    // However you want to get the members

    return out;
}
void Highway::writer(ostream & out) const {
    out << "Highway\n" << *dynamic_cast<Road*>(this) << "Terrain: " << terrain << "\n";
}
void TestHeader::outputRoads(){
    for(int i = 0; i < ind; i++)  //ind is the number of elements of the road array
        std::cout << *vecRoads[i] << std::endl;
}
void TestHeader::outputRoads(){
    for(int i = 0; i < ind; i++)  //ind is the number of elements of the road array
        *vecRoads[i].writer(std::cout);
}