【发布时间】:2015-06-23 06:22:58
【问题描述】:
我有一个基类和一个派生类,我正在尝试实现一个虚拟加载函数来向 SportCar 类添加一个额外的成员 engineSize,它应该加载 Car 类中包含的基本汽车细节,即 CarName、Color 等还包括 SportsCar 类独有的 engineSize。但它似乎并没有很好地锻炼。下面我已经包含了我的代码。目前,它只是默认为默认构造函数中包含的详细信息,即“未知”。
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Car
{
public:
Car();
virtual void Load(ifstream& carFile);
int LoadString(string filename);
protected:
string CarName;
int Age;
string Colour;
double Price;
int countUsers;
Car *ptrToCarList;
};
class SportsCar : public Car
{
public:
SportsCar();
virtual void LoadSports(ifstream& carFile);
int LoadString(string filename);
void display();
protected:
int engineSize;
SportsCar *ptrToSportsCarList;
int countUsers;
};
Car::Car()
{
CarName = "Unknown";
countUsers = 2;
}
void Car::Load(ifstream& carFile)
{
carFile >> CarName >> Age >> Colour >> Price;
}
int Car::LoadString(string filename)
{
ifstream inFile(filename);
if (!inFile)
{
cout << "Sorry, file not found" << endl;
return -1;
}
ptrToCarList = new Car[countUsers];
for (int i = 0; i < countUsers; i++)
{
ptrToCarList[i].Load(inFile);
}
inFile.close();
return 0;
}
void SportsCar::display()
{
cout << CarName << " " << Age << " " << Colour << " " << Price << " " <<engineSize <<endl;
}
void SportsCar::LoadSports(ifstream& carFile)
{
Car::Load(carFile);
carFile >> engineSize;
}
SportsCar::SportsCar() :Car()
{
}
int SportsCar::LoadString(string filename)
{
ifstream inFile(filename);
if (!inFile)
{
cout << "Sorry, file not found" << endl;
return -1;
}
ptrToSportsCarList = new SportsCar[countUsers];
for (int i = 0; i < countUsers; i++)
{
ptrToSportsCarList[i].LoadSports(inFile);
}
inFile.close();
return 0;
}
int main()
{
SportsCar example2;
example2.LoadString("sportsCarFile.txt");
example2.display();
return 0;
}
【问题讨论】:
-
您真的需要在 SportsCar 中使用相同的变量 countUsers 吗? SportsCar::LoadString 函数使用未初始化的 countUsers。您正在初始化 countUsers 但来自 Car 类
-
根据您所做的,您认为
example2.LoadString("sportsCarFile.txt");做了什么?我的意思是,代码是做什么的,而不是你想要它做什么。 -
你的基类
Car应该有一个虚拟析构函数。 -
为什么一辆车同时包含汽车信息和汽车集合?我的车完全不知道其他车。
-
LoadString也应该是虚拟的。
标签: c++ function class inheritance virtual