使用对象指针访问其他类中的成员函数

时间:2015-10-26 01:32:25

标签: c++ pointers polymorphism abstract-class

我有一个帐户类,其中包含数据成员accountNumber,accountBalance和指向Person对象accountPerson的指针。所有这些都是受保护的,因为Account是一个抽象基类。我的程序从文件中读取信息,我试图调用每个对象自己的readData()方法。出于某种原因,当我调用accountPerson-> readData(file);时会抛出异常。

我只包含类.cpp文件中的readData函数。如果我需要包含其他任何内容,请告诉我。

请查看我的代码,如果我遗漏了某些内容,请告诉我。

Account.cpp

void Account::readData(ifstream &ifile)
{
    string a;
    string b;

    if (ifile.fail() || ifile.bad())
        {
            throw readFileException("Could not read file");
        }
        else
        {
            getline(ifile, a);
            accountNumber = stoi(a);
            getline(ifile, b);
            accountBalance = stod(b);
            accountPerson->readData(ifile);
        }
}

Person.cpp

void Person::readData(ifstream &ifile)
{
    if (ifile.fail() || ifile.bad())
    {
        throw readFileException("Could not read file");
    }
    else
    {
        getline(ifile, name);
        getline(ifile, address);
    }
}

储蓄帐户.cpp

void Savings::readData(ifstream &ifile)
{
    string _a;
    if (ifile.fail() || ifile.bad())
    {
        throw readFileException("Could not read file");
    }
    else
    {
        ifile >> interest;
        ifile.ignore();
        Account::readData(ifile);
    }
}

driver.cpp

while (inFile.good())
{
    if (!inFile.eof()) //Loop to read in accounts and push them to vector
    {
        while (inFile >> type)
        {
            if (type == "Checking")
            {
                cout << type << endl;
                a[index] = new Checking();
            }
            else
            {
                cout << type << endl;
                a[index] = new Savings();
            }
            cout << index << endl;
            try
            {
                a[index]->readData(inFile);
            }
            catch (readFileException &e)
            {
                cout << "Error: " << e.getMessage() << endl;
                system("pause");
                exit(1);
            }
            index++;
        }
    }
} // end of while loop

例外说:

  

Project3.exe中0x0016733B处抛出异常:0xC0000005:Access   违规读取位置0x00000014。

非常感谢初学者的任何提示。谢谢。

0 个答案:

没有答案