从文件读取C++多态性项目

从文件读取C++多态性项目,c++,C++,我正在为学校的多态性项目工作,该项目有一个基础类乐器和两个衍生类弦和黄铜。主要来说,我们需要创建一个基类指针数组,然后从文件中读取数据,并根据对象是黄铜还是字符串,使用指针创建一个新对象。然后我们需要使用虚拟显示函数来输出结果。我的问题是我的输出只是重复文件中的第二项,并且只从第一项中获取成本等 正在读取的文件的内容 S Messiah Stradivarius 18000000 1 4 S The Titanic Violin 1700000 1 2 S The Lady Tennant 20

我正在为学校的多态性项目工作,该项目有一个基础类乐器和两个衍生类弦和黄铜。主要来说,我们需要创建一个基类指针数组,然后从文件中读取数据,并根据对象是黄铜还是字符串,使用指针创建一个新对象。然后我们需要使用虚拟显示函数来输出结果。我的问题是我的输出只是重复文件中的第二项,并且只从第一项中获取成本等

正在读取的文件的内容

S
Messiah Stradivarius
18000000
1
4
S
The Titanic Violin
1700000
1
2
S
The Lady Tennant
2032000
1
4
S
The Hammer Stradivarius
3544000
1
4
B
French horm
8500
valves
brass
S
Eric Clapton's Blackie
959500
0
6
S
Jimmy Page's double-neck Gibson EDS-1275
1245600
0
12
S
Willie Nelson's Lucille
30
0
6
I
Bass drum
239
B
Trumpet
1200
valves
brass
I
Saxophone
3800
I
Piccolo
149
S
Jimi Hendrix's First Wife
1250000
0
6
客户端文件

const int MAX = 15;

int main()
{
    int i = 0;
    string inType;
    string inName;
    int inCost;
    int inBowed;
    int inStrings;
    string inSound;
    string inMaterial;

    MusicalInstrument* p2i[MAX];

    ifstream infile;
    infile.open("prog7.txt");

    while (i < MAX && !infile.eof())
    {
        infile >> inType;
        if (inType == "S")
        {
            getline(infile, inName);
            infile >> inCost;
            infile >> inBowed;
            infile >> inStrings;
            p2i[i] = new StringInstrument(inName ,inCost ,inBowed ,inStrings);
            p2i[i]->displayInstrument();

        }
        else
        {

            getline(infile, inName);
            infile >> inCost;
            getline(infile, inSound);
            getline(infile, inMaterial);
            p2i[i] = new BrassInstrument(inName, inCost, inSound,inMaterial);
            p2i[i]->displayInstrument();

        }
        i++;

    }
    infile.close();
    while (i < MAX)
    {
        delete p2i[i];
        p2i[i] = nullptr;
        i++;
    }


    return(0);
}   

不需要创建派生类的对象。因为在多态性中,我们可以直接使用基类的派生类。 在基层,, 基类对象; object.function\u名称; 它将直接访问派生类。

请发布音乐工具。弦乐等等,换句话说,还有,
~/cs2020$ a.out
Type: String Instrument
Name: MessiahStradivarius
Cost: 1.8e+07
Bowed: 1
Strings: 4
Type: String Instrument
Name: TheTitanic
Cost: 0
Bowed: 1
Strings: 4
Type: String Instrument
Name: TheTitanic
Cost: 0
Bowed: 1
Strings: 4
Type: String Instrument
Name: TheTitanic
Cost: 0
Bowed: 1
Strings: 4
Type: String Instrument
Name: TheTitanic
Cost: 0
Bowed: 1
Strings: 4
Type: String Instrument
Name: TheTitanic
Cost: 0
Bowed: 1
Strings: 4
Type: String Instrument
Name: TheTitanic
Cost: 0
Bowed: 1
Strings: 4